<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Typedef-Chaos in Anti-Grain-Geometry: Debug&#x2F;Release unterschied]]></title><description><![CDATA[<p>Hallo Leute,</p>
<p>ich benutze seit kurzem die Anti-Grain-Geometry-Bibliothek, um Graphen und Grafiken anti-aliast und in subpixel genauigkeit zu zeichnen. Im debug-Mode läuft auch alles super. Im Release-Mode werden bei manchen Operationen Farben falsch dargestellt, was, wie ich festgestellt habe, an einer Konvertierung von abenteuerlichen (d.h. welche ich nicht ganz verstehe) Typedefs und Templates liegt. Hier der Code zur Erläuterung:</p>
<pre><code class="language-cpp">template&lt;class Rasterizer, class Scanline, 
             class BaseRenderer, class ColorT&gt;
    void render_scanlines_aa_solid(Rasterizer&amp; ras, Scanline&amp; sl, 
                                   BaseRenderer&amp; ren, const ColorT&amp; color)
    {
        if(ras.rewind_scanlines())
        {
            // Explicitly convert &quot;color&quot; to the BaseRenderer color type.
            // For example, it can be called with color type &quot;rgba&quot;, while
            // &quot;rgba8&quot; is needed. Otherwise it will be implicitly 
            // converted in the loop many times.
            //----------------------
            typename BaseRenderer::color_type ren_color(color);
</code></pre>
<p>ren_color wird im Release Mode falsch konvertiert, also falsch aus dem color-Parameter gebildet. Eigentlich sollten sowohl ColorT als auch BaseRenderer::color_type den Typ agg::rgba8 haben.</p>
<p>Naja, durch das Typen und Template-Chaos muss von Euch auch keiner durchsteigen, aber vielleicht kann mir jemand sagen, wie es zu einem Unterschied zwischen Debug und Release-Mode in diesem Fall kommen kann?</p>
<p>Vielen Dank für jeden Hinweis<br />
Sören</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/233495/typedef-chaos-in-anti-grain-geometry-debug-release-unterschied</link><generator>RSS for Node</generator><lastBuildDate>Thu, 24 Sep 2026 11:27:51 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/233495.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 05 Feb 2009 10:03:52 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Typedef-Chaos in Anti-Grain-Geometry: Debug&#x2F;Release unterschied on Thu, 05 Feb 2009 10:03:52 GMT]]></title><description><![CDATA[<p>Hallo Leute,</p>
<p>ich benutze seit kurzem die Anti-Grain-Geometry-Bibliothek, um Graphen und Grafiken anti-aliast und in subpixel genauigkeit zu zeichnen. Im debug-Mode läuft auch alles super. Im Release-Mode werden bei manchen Operationen Farben falsch dargestellt, was, wie ich festgestellt habe, an einer Konvertierung von abenteuerlichen (d.h. welche ich nicht ganz verstehe) Typedefs und Templates liegt. Hier der Code zur Erläuterung:</p>
<pre><code class="language-cpp">template&lt;class Rasterizer, class Scanline, 
             class BaseRenderer, class ColorT&gt;
    void render_scanlines_aa_solid(Rasterizer&amp; ras, Scanline&amp; sl, 
                                   BaseRenderer&amp; ren, const ColorT&amp; color)
    {
        if(ras.rewind_scanlines())
        {
            // Explicitly convert &quot;color&quot; to the BaseRenderer color type.
            // For example, it can be called with color type &quot;rgba&quot;, while
            // &quot;rgba8&quot; is needed. Otherwise it will be implicitly 
            // converted in the loop many times.
            //----------------------
            typename BaseRenderer::color_type ren_color(color);
</code></pre>
<p>ren_color wird im Release Mode falsch konvertiert, also falsch aus dem color-Parameter gebildet. Eigentlich sollten sowohl ColorT als auch BaseRenderer::color_type den Typ agg::rgba8 haben.</p>
<p>Naja, durch das Typen und Template-Chaos muss von Euch auch keiner durchsteigen, aber vielleicht kann mir jemand sagen, wie es zu einem Unterschied zwischen Debug und Release-Mode in diesem Fall kommen kann?</p>
<p>Vielen Dank für jeden Hinweis<br />
Sören</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1658340</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1658340</guid><dc:creator><![CDATA[soerenP]]></dc:creator><pubDate>Thu, 05 Feb 2009 10:03:52 GMT</pubDate></item><item><title><![CDATA[Reply to Typedef-Chaos in Anti-Grain-Geometry: Debug&#x2F;Release unterschied on Thu, 05 Feb 2009 10:17:26 GMT]]></title><description><![CDATA[<p>soerenP schrieb:</p>
<blockquote>
<p>[...] aber vielleicht kann mir jemand sagen, wie es zu einem Unterschied zwischen Debug und Release-Mode in diesem Fall kommen kann?</p>
</blockquote>
<p>Präprozessor? #ifdef NDEBUG...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1658349</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1658349</guid><dc:creator><![CDATA[[[global:former_user]]]]></dc:creator><pubDate>Thu, 05 Feb 2009 10:17:26 GMT</pubDate></item><item><title><![CDATA[Reply to Typedef-Chaos in Anti-Grain-Geometry: Debug&#x2F;Release unterschied on Thu, 05 Feb 2009 12:08:25 GMT]]></title><description><![CDATA[<p>Hmmm. Nicht dass ich wüsste, aber ich schau mal nach ob sich irgendwo so was versteckt... Kann es für Templates und Typendefinitionen unterschiede zwischen den Konfigurationen geben?</p>
<p>Grüße<br />
Sören</p>
<p>Edit: Im fraglichen Code sind keine DEBUG-bezüglichen Präprozessor-Direktiven zu sehen...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1658425</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1658425</guid><dc:creator><![CDATA[soerenP]]></dc:creator><pubDate>Thu, 05 Feb 2009 12:08:25 GMT</pubDate></item><item><title><![CDATA[Reply to Typedef-Chaos in Anti-Grain-Geometry: Debug&#x2F;Release unterschied on Thu, 05 Feb 2009 13:56:54 GMT]]></title><description><![CDATA[<p>ich hab schon ziemlich viel mit agg gemacht,<br />
und muss sagen das dein problem eigentlich garnicht auftreten sollte ^^</p>
<p>zeig mal die typendefinitionen von rendering_buffer, pixelformat, renderer_base, rasterizer, ... etc</p>
<p>gruss</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1658498</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1658498</guid><dc:creator><![CDATA[inpimp]]></dc:creator><pubDate>Thu, 05 Feb 2009 13:56:54 GMT</pubDate></item><item><title><![CDATA[Reply to Typedef-Chaos in Anti-Grain-Geometry: Debug&#x2F;Release unterschied on Mon, 09 Feb 2009 17:16:44 GMT]]></title><description><![CDATA[<p>Moin,<br />
Was meinst du mit: Zeig mal die Typdefinitionen...? Die sind doch im agg definiert, oder?<br />
Die Parameter der Funktion sind:<br />
Color:<br />
agg::rgba8(fillColor.red,fillColor.green,fillColor.blue,fillColor.alpha)<br />
Base Renderer:<br />
renderer_base&lt;pixfmt_bgr24&gt; baseRenderer;<br />
Scanline:<br />
agg::scanline_u8 sl;<br />
Rasterizer:<br />
agg::rasterizer_scanline_aa&lt;&gt; scanlineRasterizer;</p>
<p>Das ganze geht übrigens nur schief, wenn ich Ellipsen zeichnen will, falls es was hilft:</p>
<pre><code class="language-cpp">void Vst2AggAdapter::renderEllipse(agg::ellipse ellipse)
{
	if(!drawBufferAdapter.getBuffer())return;
	agg::scanline_u8 sl;
	agg::conv_transform&lt;agg::ellipse,agg::trans_affine&gt; ePath(ellipse, trans_affine());
    scanlineRasterizer.add_path(ePath);
	agg::render_scanlines_aa_solid(scanlineRasterizer, sl, *aggRenderer.getBaseRenderer(), agg::rgba8(fillColor.red,fillColor.green,fillColor.blue,fillColor.alpha));
	scanlineRasterizer.reset();
}
</code></pre>
<p>Danke!<br />
Sören</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1660623</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1660623</guid><dc:creator><![CDATA[soerenP]]></dc:creator><pubDate>Mon, 09 Feb 2009 17:16:44 GMT</pubDate></item><item><title><![CDATA[Reply to Typedef-Chaos in Anti-Grain-Geometry: Debug&#x2F;Release unterschied on Mon, 09 Feb 2009 18:04:47 GMT]]></title><description><![CDATA[<p>Kann es sein, dass du deine Variablen nicht alle initialisierst? - Daher könnte unteschiedliches Verhalten von Debug und Release hervorgerufen werden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1660667</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1660667</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Mon, 09 Feb 2009 18:04:47 GMT</pubDate></item><item><title><![CDATA[Reply to Typedef-Chaos in Anti-Grain-Geometry: Debug&#x2F;Release unterschied on Tue, 10 Feb 2009 12:44:53 GMT]]></title><description><![CDATA[<p>Das kommt bei mir mit Sicherheit mal vor, hier aber ganz bestimmt nicht. Die verwendeten Variablen Funktionieren beim Linienzeichnen super. aggRenderer.getBaseRenderer() ist auf jeden Fall initialisiert und color initialisiere ich ja beim Funktionsaufruf, fillColor gehts auch top. Was anderes sollte mit der Problematik ja nichts zu tun haben, oder? Meint ihr, dass beim dereferenzieren von getBaseRenderer() was schief gehen kann?<br />
Grüße<br />
Sören</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1661033</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1661033</guid><dc:creator><![CDATA[soerenP]]></dc:creator><pubDate>Tue, 10 Feb 2009 12:44:53 GMT</pubDate></item><item><title><![CDATA[Reply to Typedef-Chaos in Anti-Grain-Geometry: Debug&#x2F;Release unterschied on Tue, 10 Feb 2009 14:27:31 GMT]]></title><description><![CDATA[<p>Hast du Code in assertions? Der geht im Releasemode i.d.R. baden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1661152</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1661152</guid><dc:creator><![CDATA[7H3 N4C3R]]></dc:creator><pubDate>Tue, 10 Feb 2009 14:27:31 GMT</pubDate></item><item><title><![CDATA[Reply to Typedef-Chaos in Anti-Grain-Geometry: Debug&#x2F;Release unterschied on Tue, 10 Feb 2009 16:22:57 GMT]]></title><description><![CDATA[<p>soerenP schrieb:</p>
<blockquote>
<p>Moin,<br />
Was meinst du mit: Zeig mal die Typdefinitionen...? Die sind doch im agg definiert, oder?<br />
Die Parameter der Funktion sind:<br />
Color:<br />
agg::rgba8(fillColor.red,fillColor.green,fillColor.blue,fillColor.alpha)<br />
Base Renderer:<br />
renderer_base&lt;pixfmt_bgr24&gt; baseRenderer;<br />
Scanline:<br />
agg::scanline_u8 sl;<br />
Rasterizer:<br />
agg::rasterizer_scanline_aa&lt;&gt; scanlineRasterizer;</p>
<p>Das ganze geht übrigens nur schief, wenn ich Ellipsen zeichnen will, falls es was hilft:</p>
<pre><code class="language-cpp">void Vst2AggAdapter::renderEllipse(agg::ellipse ellipse)
{
	if(!drawBufferAdapter.getBuffer())return;
	agg::scanline_u8 sl;
	agg::conv_transform&lt;agg::ellipse,agg::trans_affine&gt; ePath(ellipse, trans_affine());
    scanlineRasterizer.add_path(ePath);
	agg::render_scanlines_aa_solid(scanlineRasterizer, sl, *aggRenderer.getBaseRenderer(), agg::rgba8(fillColor.red,fillColor.green,fillColor.blue,fillColor.alpha));
	scanlineRasterizer.reset();
}
</code></pre>
<p>Danke!<br />
Sören</p>
</blockquote>
<p>soweit ich das sehe verwendest du einen rgba8 typen auf einem bgr24 surface.<br />
was dazu führt das du die farben falsch darstellst.</p>
<p>nur der lesbarkeit halber solltest du die agg typen in typedefinitions ausdrücken.<br />
das verhindert natürlich das man sich mal beim typen irrt, und unerklärliche effekte hervorruft.</p>
<pre><code class="language-cpp">typedef agg::pixfmt_bgr24 TPixFmt; 
typedef agg::renderer_base&lt;TPixFmt&gt; TRendererBase;
typedef typename TPixFmt::color_type TColor; //bin mir nicht sicher ob das color_type wirklich so heisst (definiert ist der typ aufjedenfall).

...

void Vst2AggAdapter::renderEllipse(agg::ellipse ellipse)
{
...
	agg::render_scanlines_aa_solid(scanlineRasterizer, sl, *aggRenderer.getBaseRenderer(),
 TColor(fillColor.blue,fillColor.green,fillColor.red)); //hier TColor verwendet, welches global definiert ist
...
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1661229</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1661229</guid><dc:creator><![CDATA[inpimp]]></dc:creator><pubDate>Tue, 10 Feb 2009 16:22:57 GMT</pubDate></item><item><title><![CDATA[Reply to Typedef-Chaos in Anti-Grain-Geometry: Debug&#x2F;Release unterschied on Sun, 15 Feb 2009 15:35:28 GMT]]></title><description><![CDATA[<p>inpimp schrieb:</p>
<blockquote>
<p>]</p>
<p>soweit ich das sehe verwendest du einen rgba8 typen auf einem bgr24 surface.<br />
was dazu führt das du die farben falsch darstellst.</p>
</blockquote>
<p>Hallo inpimp,<br />
das ist leider falsch. Der Pixelformattyp ist zwar pixfmt_bgr24, der color_type von pixfmt_bgr24 ist aber rgba8. Außerdem wird ja auch versucht, die Farbtypen ins richtige Format zu konvertieren, was auch bei verschiedenen Typen funktionieren sollte, weil ich mir ja sonst auch nicht die Mühe machen müsste, erst die Farbe zu konvertieren. Und die Debug/Release-Unterschiede sind damit auch nicht geklärt. Und nochwas: Warum werden Linien in der korrekten Farbe dargestellt, Ellipsen nicht?<br />
Was den Umgang mit Typedefinitionen angeht hast du aber vermutlich recht, das sollte ich mir angewöhnen.</p>
<p>Vielen Dank trotzdem...<br />
Sören<br />
Edit:<br />
Ich hab, um die ganze Sache besser Debuggen zu können, in der Release-Konfguration StackFrames an und die Optimierung aus. =&gt; Da ist der Fehler natürlich weg. WASZUMTEUFEL???<br />
Edit2:<br />
Jetzt, wo ich auch die VertexSources verstanden haben, hab ich die conv_transform weggelassen. Und jetzt läuft es. Seltsam. Die falschen Farben kamen wohl durch falschen Ausgabem beim Debug. (Die angezeigten Werte waren falsch...)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1664054</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1664054</guid><dc:creator><![CDATA[soerenP]]></dc:creator><pubDate>Sun, 15 Feb 2009 15:35:28 GMT</pubDate></item><item><title><![CDATA[Reply to Typedef-Chaos in Anti-Grain-Geometry: Debug&#x2F;Release unterschied on Sun, 15 Feb 2009 11:09:22 GMT]]></title><description><![CDATA[<p>Das ist ein sehr nerviger Fehler und ich denke mal sehr schwer zu finden. Da kommst du wahrscheinlich am besten mit divide and conquer am besten voran. Geh Stück für Stück dem Fehler auf die schliche. Mit Debugger und sehr viel Geduld. Also schau, was falsch läuft, dann schau warum das falsch läuft. Also wenn z.B die Color falsch ist, kannst du nachschauen, welche Farbe beim rendern da ist. Dann weisst du, wenn die Farbe die falsche ist, dass irgendwo eine falsche gesetzt wird. Und so halt immer Stück für Stück zurück.</p>
<p>Mir ist bewusst, dass das jetzt nicht wirkilch das ist, was du an Hilfe erwartest, aber für uns ist das ganze noch viel schwerer nachzuvollziehen, weil wir weder deinen gesamten Code, noch die Bibiliothek mit der du arbeitest kennen. (zumindest ich nicht).</p>
<p>Du kannst einfach froh sein, dass du den Fehler reproduzieren kannst. Ich hatte letztens Fehler, die nur sporadisch und mit Zufallszahlen erscheinen. Sprich ich durfte einfach mal alles mittracken und wenn der Fehler so nach ein paar Minuten erschienen ist musste ich den mit dem Debugger dazwischen gehen und die nächsten paar Schritte Stück für Stück durchdenken.. Und sobald ich ein Stück zu weit ging, durfte ich wieder ein paar Minuten warten, bis ich wieder beim Fehler war.. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    /></p>
<p>Du siehst, dass jeder solche Fehler hat und da sehr viel Zeit draufgeht bei der Suche. Das einzige was du brauchst ist Zeit und Geduld. (Auch wenn es ein paar Tage dauert).. Wenn du den Fehler einmal hast ist das umso mehr eine Erhebung. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1664098</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1664098</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Sun, 15 Feb 2009 11:09:22 GMT</pubDate></item><item><title><![CDATA[Reply to Typedef-Chaos in Anti-Grain-Geometry: Debug&#x2F;Release unterschied on Sun, 15 Feb 2009 22:12:06 GMT]]></title><description><![CDATA[<p>ich mag jetzt nicht auf dem beharren was ich gesagt habe, da ich agg nicht mehr so intensiv nutze.</p>
<p>aber wegen surfaces und farben konvertieren: bei agg 2.4 (die letzte version die ich verwendet habe) wurde nichts implizit konvertiert, man musste den richtigen surfacetype + colortype angeben.</p>
<p>um zweifel auszuräumen gibts ja zum glück den source <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":-)"
      alt="🙂"
    /></p>
<p>wenn du dir absolut sicher bist das du nichts falsch machst, und auch die neueste version davon hast,<br />
solltest du das fehlverhalten dem agg author berichten <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":-)"
      alt="🙂"
    /></p>
<p>er leistet soweit ich weiss wunderbar support für agg.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1664454</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1664454</guid><dc:creator><![CDATA[inpimp]]></dc:creator><pubDate>Sun, 15 Feb 2009 22:12:06 GMT</pubDate></item></channel></rss>