mirror of
https://github.com/bkaradzic/bgfx.git
synced 2026-06-08 03:13:52 +00:00
353 lines
31 KiB
HTML
353 lines
31 KiB
HTML
|
||
|
||
<!DOCTYPE html>
|
||
<html class="writer-html5" lang="en" data-content_root="./">
|
||
<head>
|
||
<meta charset="utf-8" /><meta name="viewport" content="width=device-width, initial-scale=1" />
|
||
|
||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||
<title>IDL — Interface Definition Language — bgfx 1.142.9194 documentation</title>
|
||
<link rel="stylesheet" type="text/css" href="_static/pygments.css?v=03e43079" />
|
||
<link rel="stylesheet" type="text/css" href="_static/css/theme.css?v=e59714d7" />
|
||
|
||
|
||
<script src="_static/jquery.js?v=5d32c60e"></script>
|
||
<script src="_static/_sphinx_javascript_frameworks_compat.js?v=2cd50e6c"></script>
|
||
<script src="_static/documentation_options.js?v=9c0e2687"></script>
|
||
<script src="_static/doctools.js?v=9bcbadda"></script>
|
||
<script src="_static/sphinx_highlight.js?v=dc90522c"></script>
|
||
<script src="_static/js/theme.js"></script>
|
||
<link rel="index" title="Index" href="genindex.html" />
|
||
<link rel="search" title="Search" href="search.html" />
|
||
<link rel="next" title="License" href="license.html" />
|
||
<link rel="prev" title="Internals" href="internals.html" />
|
||
</head>
|
||
|
||
<body class="wy-body-for-nav">
|
||
<div class="wy-grid-for-nav">
|
||
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
|
||
<div class="wy-side-scroll">
|
||
<div class="wy-side-nav-search" >
|
||
|
||
|
||
|
||
<a href="index.html" class="icon icon-home">
|
||
bgfx
|
||
</a>
|
||
<div role="search">
|
||
<form id="rtd-search-form" class="wy-form" action="search.html" method="get">
|
||
<input type="text" name="q" placeholder="Search docs" aria-label="Search docs" />
|
||
<input type="hidden" name="check_keywords" value="yes" />
|
||
<input type="hidden" name="area" value="default" />
|
||
</form>
|
||
</div>
|
||
</div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu">
|
||
<ul class="current">
|
||
<li class="toctree-l1"><a class="reference internal" href="overview.html">Overview</a></li>
|
||
<li class="toctree-l1"><a class="reference internal" href="build.html">Building</a></li>
|
||
<li class="toctree-l1"><a class="reference internal" href="examples.html">Examples</a></li>
|
||
<li class="toctree-l1"><a class="reference internal" href="bgfx.html">API Reference</a></li>
|
||
<li class="toctree-l1"><a class="reference internal" href="tools.html">Tools</a></li>
|
||
<li class="toctree-l1"><a class="reference internal" href="internals.html">Internals</a></li>
|
||
<li class="toctree-l1 current"><a class="current reference internal" href="#">IDL — Interface Definition Language</a><ul>
|
||
<li class="toctree-l2"><a class="reference internal" href="#purpose">Purpose</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="#file-overview">File overview</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="#running-the-code-generators">Running the code generators</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="#idl-syntax-reference">IDL syntax reference</a><ul>
|
||
<li class="toctree-l3"><a class="reference internal" href="#version">version</a></li>
|
||
<li class="toctree-l3"><a class="reference internal" href="#typedef">typedef</a></li>
|
||
<li class="toctree-l3"><a class="reference internal" href="#handle">handle</a></li>
|
||
<li class="toctree-l3"><a class="reference internal" href="#enum">enum</a></li>
|
||
<li class="toctree-l3"><a class="reference internal" href="#flag">flag</a></li>
|
||
<li class="toctree-l3"><a class="reference internal" href="#struct">struct</a></li>
|
||
<li class="toctree-l3"><a class="reference internal" href="#func">func</a></li>
|
||
<li class="toctree-l3"><a class="reference internal" href="#funcptr">funcptr</a></li>
|
||
<li class="toctree-l3"><a class="reference internal" href="#section">section</a></li>
|
||
<li class="toctree-l3"><a class="reference internal" href="#documentation-comments">Documentation comments</a></li>
|
||
</ul>
|
||
</li>
|
||
<li class="toctree-l2"><a class="reference internal" href="#adding-a-new-api-function">Adding a new API function</a></li>
|
||
</ul>
|
||
</li>
|
||
<li class="toctree-l1"><a class="reference internal" href="license.html">License</a></li>
|
||
</ul>
|
||
|
||
</div>
|
||
</div>
|
||
</nav>
|
||
|
||
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Mobile navigation menu" >
|
||
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
|
||
<a href="index.html">bgfx</a>
|
||
</nav>
|
||
|
||
<div class="wy-nav-content">
|
||
<div class="rst-content">
|
||
<div role="navigation" aria-label="Page navigation">
|
||
<ul class="wy-breadcrumbs">
|
||
<li><a href="index.html" class="icon icon-home" aria-label="Home"></a></li>
|
||
<li class="breadcrumb-item active">IDL — Interface Definition Language</li>
|
||
<li class="wy-breadcrumbs-aside">
|
||
</li>
|
||
</ul>
|
||
<hr/>
|
||
</div>
|
||
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
|
||
<div itemprop="articleBody">
|
||
|
||
<section id="idl-interface-definition-language">
|
||
<h1>IDL — Interface Definition Language<a class="headerlink" href="#idl-interface-definition-language" title="Link to this heading"></a></h1>
|
||
<p>bgfx uses a custom Interface Definition Language (IDL) to define its entire public API in a single
|
||
source-of-truth file: <code class="docutils literal notranslate"><span class="pre">scripts/bgfx.idl</span></code>. From this file, code generators produce the C99 API,
|
||
C++ API, language bindings, and documentation — ensuring that all representations stay in sync.</p>
|
||
<p>For additional background and motivation, see the blog post:
|
||
<a class="reference external" href="https://bkaradzic.github.io/posts/idl/">IDL — Interface Definition Language</a>.</p>
|
||
<section id="purpose">
|
||
<h2>Purpose<a class="headerlink" href="#purpose" title="Link to this heading"></a></h2>
|
||
<p>The IDL serves several goals:</p>
|
||
<ul class="simple">
|
||
<li><p><strong>Single source of truth</strong> — The API (types, functions, flags, enums, structs, handles) is
|
||
declared once in <code class="docutils literal notranslate"><span class="pre">bgfx.idl</span></code>. All generated outputs derive from this file.</p></li>
|
||
<li><p><strong>Multi-language bindings</strong> — Code generators read the IDL and produce bindings for C99, C#, D,
|
||
Zig, Beef, C3, and potentially other languages.</p></li>
|
||
<li><p><strong>Documentation generation</strong> — The <code class="docutils literal notranslate"><span class="pre">docs-rst.lua</span></code> generator produces reStructuredText API
|
||
reference documentation from the IDL.</p></li>
|
||
<li><p><strong>Consistency</strong> — Changes to the API only need to be made in one place. The code generators
|
||
ensure that all bindings and documentation are updated automatically.</p></li>
|
||
</ul>
|
||
</section>
|
||
<section id="file-overview">
|
||
<h2>File overview<a class="headerlink" href="#file-overview" title="Link to this heading"></a></h2>
|
||
<p>All IDL-related files live under <code class="docutils literal notranslate"><span class="pre">scripts/</span></code>:</p>
|
||
<dl class="simple">
|
||
<dt><code class="docutils literal notranslate"><span class="pre">bgfx.idl</span></code></dt><dd><p>The IDL source file. Contains all type definitions, function declarations, flag/enum
|
||
definitions, struct layouts, handle types, documentation comments, and the section hierarchy
|
||
for the generated docs.</p>
|
||
</dd>
|
||
<dt><code class="docutils literal notranslate"><span class="pre">idl.lua</span></code></dt><dd><p>The IDL parser/runtime. Sets up the Lua environment that <code class="docutils literal notranslate"><span class="pre">bgfx.idl</span></code> executes in. Provides
|
||
the DSL keywords (<code class="docutils literal notranslate"><span class="pre">typedef</span></code>, <code class="docutils literal notranslate"><span class="pre">enum</span></code>, <code class="docutils literal notranslate"><span class="pre">flag</span></code>, <code class="docutils literal notranslate"><span class="pre">struct</span></code>, <code class="docutils literal notranslate"><span class="pre">handle</span></code>, <code class="docutils literal notranslate"><span class="pre">func</span></code>,
|
||
<code class="docutils literal notranslate"><span class="pre">funcptr</span></code>, <code class="docutils literal notranslate"><span class="pre">section</span></code>, <code class="docutils literal notranslate"><span class="pre">version</span></code>, etc.) as Lua metatable-driven constructors.</p>
|
||
</dd>
|
||
<dt><code class="docutils literal notranslate"><span class="pre">codegen.lua</span></code></dt><dd><p>Shared code generation utilities. Reads the parsed IDL, resolves types, converts between
|
||
naming conventions (CamelCase ↔ underscore_case), and provides template expansion for
|
||
function signatures.</p>
|
||
</dd>
|
||
<dt><code class="docutils literal notranslate"><span class="pre">bgfx-codegen.lua</span></code></dt><dd><p>The main code generator. Reads the IDL via <code class="docutils literal notranslate"><span class="pre">codegen.lua</span></code> and produces the C99 header,
|
||
C++ header, C99-to-C++ bridge implementation, and the internal function ID tables.</p>
|
||
</dd>
|
||
<dt><code class="docutils literal notranslate"><span class="pre">bindings-*.lua</span></code></dt><dd><p>Per-language binding generators (<code class="docutils literal notranslate"><span class="pre">bindings-cs.lua</span></code>, <code class="docutils literal notranslate"><span class="pre">bindings-d.lua</span></code>, <code class="docutils literal notranslate"><span class="pre">bindings-zig.lua</span></code>,
|
||
<code class="docutils literal notranslate"><span class="pre">bindings-bf.lua</span></code>, <code class="docutils literal notranslate"><span class="pre">bindings-c3.lua</span></code>). Each reads the IDL and outputs the API in the
|
||
target language’s syntax and conventions.</p>
|
||
</dd>
|
||
<dt><code class="docutils literal notranslate"><span class="pre">docs-rst.lua</span></code></dt><dd><p>Generates reStructuredText API reference documentation (<code class="docutils literal notranslate"><span class="pre">docs/bgfx.rst</span></code>) from the IDL.</p>
|
||
</dd>
|
||
</dl>
|
||
</section>
|
||
<section id="running-the-code-generators">
|
||
<h2>Running the code generators<a class="headerlink" href="#running-the-code-generators" title="Link to this heading"></a></h2>
|
||
<p>The code generators are invoked via the makefile at the repository root:</p>
|
||
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>make<span class="w"> </span>idl
|
||
</pre></div>
|
||
</div>
|
||
<p>This runs the Lua scripts that regenerate all C/C++ headers, language bindings, and documentation
|
||
from <code class="docutils literal notranslate"><span class="pre">scripts/bgfx.idl</span></code>.</p>
|
||
</section>
|
||
<section id="idl-syntax-reference">
|
||
<h2>IDL syntax reference<a class="headerlink" href="#idl-syntax-reference" title="Link to this heading"></a></h2>
|
||
<p>The IDL file is valid Lua, executed in a special environment that provides the DSL keywords.
|
||
Comments prefixed with <code class="docutils literal notranslate"><span class="pre">---</span></code> become documentation comments attached to the next declaration.</p>
|
||
<section id="version">
|
||
<h3>version<a class="headerlink" href="#version" title="Link to this heading"></a></h3>
|
||
<p>Declares the API version number:</p>
|
||
<div class="highlight-lua notranslate"><div class="highlight"><pre><span></span><span class="nf">version</span><span class="p">(</span><span class="mi">140</span><span class="p">)</span>
|
||
</pre></div>
|
||
</div>
|
||
</section>
|
||
<section id="typedef">
|
||
<h3>typedef<a class="headerlink" href="#typedef" title="Link to this heading"></a></h3>
|
||
<p>Declares a type alias. These map IDL type names to their C/C++ equivalents:</p>
|
||
<div class="highlight-lua notranslate"><div class="highlight"><pre><span></span><span class="nv">typedef</span><span class="w"> </span><span class="s2">"uint32_t"</span>
|
||
<span class="nv">typedef</span><span class="w"> </span><span class="s2">"ViewId"</span>
|
||
<span class="nv">typedef</span><span class="w"> </span><span class="s2">"CallbackI"</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="nv">cname</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s2">"callback_interface"</span><span class="w"> </span><span class="p">}</span>
|
||
</pre></div>
|
||
</div>
|
||
<p>The optional table provides attributes. <code class="docutils literal notranslate"><span class="pre">cname</span></code> overrides the C binding name.</p>
|
||
</section>
|
||
<section id="handle">
|
||
<h3>handle<a class="headerlink" href="#handle" title="Link to this heading"></a></h3>
|
||
<p>Declares an opaque handle type. Handles are type-safe 16-bit integers used to reference GPU
|
||
resources:</p>
|
||
<div class="highlight-lua notranslate"><div class="highlight"><pre><span></span><span class="nv">handle</span><span class="w"> </span><span class="s2">"TextureHandle"</span>
|
||
<span class="nv">handle</span><span class="w"> </span><span class="s2">"VertexBufferHandle"</span>
|
||
</pre></div>
|
||
</div>
|
||
</section>
|
||
<section id="enum">
|
||
<h3>enum<a class="headerlink" href="#enum" title="Link to this heading"></a></h3>
|
||
<p>Declares an enumeration. Each member can have a <code class="docutils literal notranslate"><span class="pre">---</span></code> documentation comment:</p>
|
||
<div class="highlight-lua notranslate"><div class="highlight"><pre><span></span><span class="nv">enum</span><span class="p">.</span><span class="py">TextureFormat</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="nv">comment</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s2">"Texture formats:"</span><span class="p">,</span><span class="w"> </span><span class="nv">section</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s2">"Textures"</span><span class="w"> </span><span class="p">}</span>
|
||
<span class="w"> </span><span class="p">.</span><span class="nv">BC1</span><span class="w"> </span><span class="c1">--- DXT1 R5G6B5A1.</span>
|
||
<span class="w"> </span><span class="p">.</span><span class="py">BC2</span><span class="w"> </span><span class="c1">--- DXT3 R5G6B5A4.</span>
|
||
<span class="w"> </span><span class="p">.</span><span class="nf">Unknown</span><span class="w"> </span><span class="c1">--- Compressed formats above.</span>
|
||
<span class="w"> </span><span class="p">()</span>
|
||
</pre></div>
|
||
</div>
|
||
<p>The <code class="docutils literal notranslate"><span class="pre">()</span></code> sentinel marks the end of the enum (generates a <code class="docutils literal notranslate"><span class="pre">Count</span></code> member). The <code class="docutils literal notranslate"><span class="pre">section</span></code>
|
||
attribute controls where this type appears in the generated documentation hierarchy.</p>
|
||
</section>
|
||
<section id="flag">
|
||
<h3>flag<a class="headerlink" href="#flag" title="Link to this heading"></a></h3>
|
||
<p>Declares a bitfield flag type. Similar to <code class="docutils literal notranslate"><span class="pre">enum</span></code>, but members represent individual bits:</p>
|
||
<div class="highlight-lua notranslate"><div class="highlight"><pre><span></span><span class="nv">flag</span><span class="p">.</span><span class="py">StateWrite</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="nv">bits</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">64</span><span class="p">,</span><span class="w"> </span><span class="nv">base</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">1</span><span class="p">,</span><span class="w"> </span><span class="nv">section</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s2">"State Flags"</span><span class="p">,</span><span class="w"> </span><span class="nv">label</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s2">"Write"</span><span class="w"> </span><span class="p">}</span>
|
||
<span class="w"> </span><span class="p">.</span><span class="nv">R</span><span class="w"> </span><span class="c1">--- Enable R write.</span>
|
||
<span class="w"> </span><span class="p">.</span><span class="py">G</span><span class="w"> </span><span class="c1">--- Enable G write.</span>
|
||
<span class="w"> </span><span class="p">.</span><span class="py">B</span><span class="w"> </span><span class="c1">--- Enable B write.</span>
|
||
<span class="w"> </span><span class="p">.</span><span class="py">A</span><span class="w"> </span><span class="c1">--- Enable alpha write.</span>
|
||
<span class="w"> </span><span class="p">.</span><span class="nf">Z</span><span class="w"> </span><span class="p">(</span><span class="mi">39</span><span class="p">)</span><span class="w"> </span><span class="c1">--- Enable depth write.</span>
|
||
<span class="w"> </span><span class="p">.</span><span class="nv">Rgb</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="s2">"R"</span><span class="p">,</span><span class="w"> </span><span class="s2">"G"</span><span class="p">,</span><span class="w"> </span><span class="s2">"B"</span><span class="w"> </span><span class="p">}</span><span class="w"> </span><span class="c1">--- Enable RGB write.</span>
|
||
<span class="w"> </span><span class="p">.</span><span class="nv">Mask</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="s2">"Rgb"</span><span class="p">,</span><span class="w"> </span><span class="s2">"A"</span><span class="p">,</span><span class="w"> </span><span class="s2">"Z"</span><span class="w"> </span><span class="p">}</span><span class="w"> </span><span class="c1">--- Write all channels mask.</span>
|
||
</pre></div>
|
||
</div>
|
||
<p>Attributes:</p>
|
||
<ul class="simple">
|
||
<li><p><code class="docutils literal notranslate"><span class="pre">bits</span></code> — Total bit width (32 or 64).</p></li>
|
||
<li><p><code class="docutils literal notranslate"><span class="pre">shift</span></code> — Bit offset where this flag group starts.</p></li>
|
||
<li><p><code class="docutils literal notranslate"><span class="pre">range</span></code> — Number of bits in this group.</p></li>
|
||
<li><p><code class="docutils literal notranslate"><span class="pre">base</span></code> — Starting value for auto-numbering.</p></li>
|
||
<li><p><code class="docutils literal notranslate"><span class="pre">section</span></code> — Documentation section.</p></li>
|
||
<li><p><code class="docutils literal notranslate"><span class="pre">label</span></code> — Display label for documentation grouping.</p></li>
|
||
</ul>
|
||
<p>A member with a number in parentheses (e.g. <code class="docutils literal notranslate"><span class="pre">.Z</span> <span class="pre">(39)</span></code>) sets an explicit bit position. Members
|
||
with a table of names (e.g. <code class="docutils literal notranslate"><span class="pre">.Rgb</span> <span class="pre">{</span> <span class="pre">"R",</span> <span class="pre">"G",</span> <span class="pre">"B"</span> <span class="pre">}</span></code>) define combined masks.</p>
|
||
</section>
|
||
<section id="struct">
|
||
<h3>struct<a class="headerlink" href="#struct" title="Link to this heading"></a></h3>
|
||
<p>Declares a data structure with typed fields:</p>
|
||
<div class="highlight-lua notranslate"><div class="highlight"><pre><span></span><span class="nv">struct</span><span class="p">.</span><span class="py">Init</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="nv">ctor</span><span class="p">,</span><span class="w"> </span><span class="nv">section</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s2">"Initialization and Shutdown"</span><span class="w"> </span><span class="p">}</span>
|
||
<span class="w"> </span><span class="p">.</span><span class="nb">type</span><span class="w"> </span><span class="s2">"RendererType::Enum"</span><span class="w"> </span><span class="c1">--- Select rendering backend.</span>
|
||
<span class="w"> </span><span class="p">.</span><span class="nv">vendorId</span><span class="w"> </span><span class="s2">"uint16_t"</span><span class="w"> </span><span class="c1">--- Vendor PCI ID. See: `BGFX_PCI_ID_*`.</span>
|
||
<span class="w"> </span><span class="p">.</span><span class="nv">deviceId</span><span class="w"> </span><span class="s2">"uint16_t"</span><span class="w"> </span><span class="c1">--- Device ID.</span>
|
||
<span class="w"> </span><span class="p">.</span><span class="nv">capabilities</span><span class="w"> </span><span class="s2">"uint64_t"</span><span class="w"> </span><span class="c1">--- Capabilities initialization mask.</span>
|
||
<span class="w"> </span><span class="p">.</span><span class="nv">debug</span><span class="w"> </span><span class="s2">"bool"</span><span class="w"> </span><span class="c1">--- Enable device for debugging.</span>
|
||
<span class="w"> </span><span class="p">.</span><span class="nv">profile</span><span class="w"> </span><span class="s2">"bool"</span><span class="w"> </span><span class="c1">--- Enable device for profiling.</span>
|
||
</pre></div>
|
||
</div>
|
||
<p>Attributes:</p>
|
||
<ul class="simple">
|
||
<li><p><code class="docutils literal notranslate"><span class="pre">ctor</span></code> — Generate a constructor with default values.</p></li>
|
||
<li><p><code class="docutils literal notranslate"><span class="pre">namespace</span></code> — Nest this struct inside another (e.g. <code class="docutils literal notranslate"><span class="pre">namespace</span> <span class="pre">=</span> <span class="pre">"Caps"</span></code> produces
|
||
<code class="docutils literal notranslate"><span class="pre">Caps::Limits</span></code>).</p></li>
|
||
<li><p><code class="docutils literal notranslate"><span class="pre">section</span></code> — Documentation section.</p></li>
|
||
</ul>
|
||
</section>
|
||
<section id="func">
|
||
<h3>func<a class="headerlink" href="#func" title="Link to this heading"></a></h3>
|
||
<p>Declares a function. The first string is the return type, followed by named parameters:</p>
|
||
<div class="highlight-lua notranslate"><div class="highlight"><pre><span></span><span class="c1">--- Advance to next frame.</span>
|
||
<span class="nv">func</span><span class="p">.</span><span class="py">frame</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="nv">section</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s2">"Frame"</span><span class="w"> </span><span class="p">}</span>
|
||
<span class="w"> </span><span class="s2">"uint32_t"</span><span class="w"> </span><span class="c1">--- Current frame number.</span>
|
||
<span class="w"> </span><span class="p">.</span><span class="nv">flags</span><span class="w"> </span><span class="s2">"uint8_t"</span><span class="w"> </span><span class="c1">--- Frame flags.</span>
|
||
<span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="nv">default</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s2">"BGFX_FRAME_NONE"</span><span class="w"> </span><span class="p">}</span>
|
||
</pre></div>
|
||
</div>
|
||
<p>Attributes:</p>
|
||
<ul class="simple">
|
||
<li><p><code class="docutils literal notranslate"><span class="pre">section</span></code> — Documentation section.</p></li>
|
||
<li><p><code class="docutils literal notranslate"><span class="pre">const</span></code> — Mark as a const method (for class member functions).</p></li>
|
||
<li><p><code class="docutils literal notranslate"><span class="pre">conly</span></code> — Only emit in the C99 API, not in C++.</p></li>
|
||
<li><p><code class="docutils literal notranslate"><span class="pre">cpponly</span></code> — Only emit in the C++ API, not in C99.</p></li>
|
||
<li><p><code class="docutils literal notranslate"><span class="pre">cppinline</span></code> — Provide an inline C++ implementation string.</p></li>
|
||
</ul>
|
||
<p>Parameters can have:</p>
|
||
<ul class="simple">
|
||
<li><p><code class="docutils literal notranslate"><span class="pre">{</span> <span class="pre">default</span> <span class="pre">=</span> <span class="pre">"value"</span> <span class="pre">}</span></code> — Default argument value.</p></li>
|
||
<li><p><code class="docutils literal notranslate"><span class="pre">{</span> <span class="pre">out</span> <span class="pre">}</span></code> — Output parameter.</p></li>
|
||
<li><p><code class="docutils literal notranslate"><span class="pre">{</span> <span class="pre">inout</span> <span class="pre">}</span></code> — Input/output parameter.</p></li>
|
||
</ul>
|
||
</section>
|
||
<section id="funcptr">
|
||
<h3>funcptr<a class="headerlink" href="#funcptr" title="Link to this heading"></a></h3>
|
||
<p>Declares a function pointer type:</p>
|
||
<div class="highlight-lua notranslate"><div class="highlight"><pre><span></span><span class="nv">funcptr</span><span class="p">.</span><span class="py">ReleaseFn</span>
|
||
<span class="w"> </span><span class="s2">"void"</span>
|
||
<span class="w"> </span><span class="p">.</span><span class="nv">ptr</span><span class="w"> </span><span class="s2">"void*"</span><span class="w"> </span><span class="c1">--- Pointer to allocated data.</span>
|
||
<span class="w"> </span><span class="p">.</span><span class="nv">userData</span><span class="w"> </span><span class="s2">"void*"</span><span class="w"> </span><span class="c1">--- User defined data if needed.</span>
|
||
</pre></div>
|
||
</div>
|
||
</section>
|
||
<section id="section">
|
||
<h3>section<a class="headerlink" href="#section" title="Link to this heading"></a></h3>
|
||
<p>Declares a documentation section for organizing the generated API reference. Sections form a
|
||
hierarchy based on their level (0 = top-level heading, 1 = chapter, 2+ = subsections):</p>
|
||
<div class="highlight-lua notranslate"><div class="highlight"><pre><span></span><span class="nf">section</span><span class="p">(</span><span class="s2">"API Reference"</span><span class="p">,</span><span class="w"> </span><span class="mi">0</span><span class="p">)</span>
|
||
<span class="nf">section</span><span class="p">(</span><span class="s2">"General"</span><span class="p">,</span><span class="w"> </span><span class="mi">1</span><span class="p">)</span>
|
||
<span class="nf">section</span><span class="p">(</span><span class="s2">"Initialization and Shutdown"</span><span class="p">,</span><span class="w"> </span><span class="mi">2</span><span class="p">)</span>
|
||
</pre></div>
|
||
</div>
|
||
<p>Types and functions reference their section via the <code class="docutils literal notranslate"><span class="pre">section</span></code> attribute. The documentation
|
||
generator (<code class="docutils literal notranslate"><span class="pre">docs-rst.lua</span></code>) uses the section tree to organize the output.</p>
|
||
</section>
|
||
<section id="documentation-comments">
|
||
<h3>Documentation comments<a class="headerlink" href="#documentation-comments" title="Link to this heading"></a></h3>
|
||
<p>Lines starting with <code class="docutils literal notranslate"><span class="pre">---</span></code> before a declaration become documentation comments. These are emitted
|
||
as Doxygen-style comments in the C/C++ headers and as descriptions in the generated docs:</p>
|
||
<div class="highlight-lua notranslate"><div class="highlight"><pre><span></span><span class="c1">--- Render frame.</span>
|
||
<span class="c1">---</span>
|
||
<span class="c1">--- @attention `bgfx::renderFrame` is a blocking call.</span>
|
||
<span class="c1">---</span>
|
||
<span class="c1">--- @warning This call should only be used on platforms that don't</span>
|
||
<span class="c1">--- allow creating a separate rendering thread.</span>
|
||
<span class="c1">---</span>
|
||
<span class="nv">func</span><span class="p">.</span><span class="py">renderFrame</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="nv">section</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s2">"Platform specific"</span><span class="w"> </span><span class="p">}</span>
|
||
<span class="w"> </span><span class="s2">"RenderFrame::Enum"</span>
|
||
<span class="w"> </span><span class="p">.</span><span class="nv">msecs</span><span class="w"> </span><span class="s2">"int32_t"</span>
|
||
<span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="nv">default</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="o">-</span><span class="mi">1</span><span class="w"> </span><span class="p">}</span>
|
||
</pre></div>
|
||
</div>
|
||
<p>Supported Doxygen tags in comments: <code class="docutils literal notranslate"><span class="pre">@attention</span></code>, <code class="docutils literal notranslate"><span class="pre">@warning</span></code>, <code class="docutils literal notranslate"><span class="pre">@remarks</span></code>, <code class="docutils literal notranslate"><span class="pre">@param</span></code>,
|
||
<code class="docutils literal notranslate"><span class="pre">@returns</span></code>.</p>
|
||
</section>
|
||
</section>
|
||
<section id="adding-a-new-api-function">
|
||
<h2>Adding a new API function<a class="headerlink" href="#adding-a-new-api-function" title="Link to this heading"></a></h2>
|
||
<p>To add a new function to the bgfx API:</p>
|
||
<ol class="arabic simple">
|
||
<li><p>Add the function declaration in <code class="docutils literal notranslate"><span class="pre">scripts/bgfx.idl</span></code> with the appropriate <code class="docutils literal notranslate"><span class="pre">section</span></code> attribute
|
||
and <code class="docutils literal notranslate"><span class="pre">---</span></code> documentation comments.</p></li>
|
||
<li><p>Run <code class="docutils literal notranslate"><span class="pre">make</span> <span class="pre">idl</span></code> to regenerate all headers, bindings, and documentation.</p></li>
|
||
<li><p>Implement the function in <code class="docutils literal notranslate"><span class="pre">src/bgfx.cpp</span></code> (and the renderer backends if needed).</p></li>
|
||
<li><p>Verify the generated output in <code class="docutils literal notranslate"><span class="pre">include/bgfx/bgfx.h</span></code>, <code class="docutils literal notranslate"><span class="pre">include/bgfx/c99/bgfx.h</span></code>, and the
|
||
binding files under <code class="docutils literal notranslate"><span class="pre">bindings/</span></code>.</p></li>
|
||
</ol>
|
||
</section>
|
||
</section>
|
||
|
||
|
||
</div>
|
||
</div>
|
||
<footer><div class="rst-footer-buttons" role="navigation" aria-label="Footer">
|
||
<a href="internals.html" class="btn btn-neutral float-left" title="Internals" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> Previous</a>
|
||
<a href="license.html" class="btn btn-neutral float-right" title="License" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right" aria-hidden="true"></span></a>
|
||
</div>
|
||
|
||
<hr/>
|
||
|
||
<div role="contentinfo">
|
||
<p>© Copyright 2010-2026, Branimir Karadžić.</p>
|
||
</div>
|
||
|
||
|
||
|
||
</footer>
|
||
</div>
|
||
</div>
|
||
</section>
|
||
</div>
|
||
<script>
|
||
jQuery(function () {
|
||
SphinxRtdTheme.Navigation.enable(true);
|
||
});
|
||
</script>
|
||
|
||
</body>
|
||
</html> |