Du bist nicht angemeldet.

Werbeanzeige

Nimelrian

Alter Hase

Beiträge: 1 260

Beruf: Softwareentwickler (aktuell Web/Node); Freiberuflicher Google Proxy

  • Private Nachricht senden

481

27.12.2014, 11:15

Schon ein paar Jahre alt, aber der geniale 4chan-SleepSort:
http://dis.4chan.org/read/prog/1295544154
Ich bin kein UserSideGoogleProxy. Und nein, dieses Forum ist kein UserSideGoogleProxyAbstractFactorySingleton.

Schrompf

Alter Hase

Beiträge: 1 428

Wohnort: Dresden

Beruf: Softwareentwickler

  • Private Nachricht senden

482

27.12.2014, 12:14

Der ist wirklich cool :-)
Häuptling von Dreamworlds. Baut aktuell an nichts konkretem, weil das Vollzeitangestelltenverhältnis ihn fest im Griff hat. Baut daneben nur noch sehr selten an der Open Asset Import Library mit.

Fred

Supermoderator

Beiträge: 2 130

Beruf: Softwareentwickler

  • Private Nachricht senden

483

29.12.2014, 15:01

Der "beste" Sortieralgorithmus, den ich kenne, ist und bleibt stacksort :)

484

02.01.2015, 15:09

Ich glaube, ich habe hier ein mieses Design-Pattern, aber dummerweise weiß ich momentan nicht, wie ich es besser machen könnte. Mein RenderManager arbeitet nach und nach RenderDescriptions ab. Ein Material verfügt über ein ShaderProgram und sogenannte ShaderParameter, die automatisch Uniforms setzen sollen, wenn bestimmte Konstanten in der Material-Datei gesetzt wurden, um das ganze zu vereinfachen (bspw. die ModelView-Matrix). Aber jetzt ist das hier bei rumgekommen, da ich nur die ShaderParameter auf die momentane RenderDescription über den RenderManager zugreifen lassen wollte (via friend). Jetzt bin ich etwas schockiert, über diesen Code-Schnipsel, da ich noch nie irgendwo so ein Gewusel aus Klammern gesehen habe.

RenderManager:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
class RenderManager : public ISingleton<RenderManager> {

        friend class ShaderParameter;

    public:

        /// @brief Constructs a new RenderManager.
        RenderManager ();
        /// @brief Destructs the RenderManager.
        virtual ~RenderManager ();

        /// @brief Pushes the given render description onto the render queue.
        /// @param desc The description to push.
        ///
        /// All descriptions pushed onto the render queue will be drawn when
        /// flushRenderQueue() is invoked.
        void pushRenderDescription ( const RenderDescription* desc );

        /// @brief Flushes the render queue.
        ///
        /// All Renderables which have been added as a render job up to now
        /// will be rendered.
        void flushRenderQueue ();

    protected:

        const RenderDescription* getProcessedDescription () const;

    private:

        void render ( const RenderDescription* desc );

        std::queue<const RenderDescription*> mRenderQueue;
        RenderDescription const* mProcessedDescription;

    };


ShaderParameter:

C-/C++-Quelltext

1
2
3
4
5
6
if ( std::strcmp ( value, "MODELVIEW_MATRIX" ) == 0 ) {
    const RenderDescription* ( RenderManager::* __funcptr )( ) const = RenderManager::getProcessedDescription;
    return new LambaShaderParam ( location, [__funcptr] ( I32 location ) {
        glUniformMatrix4fv ( location, 1, false, ( RenderManager::getRef().*__funcptr) ()->getModelView().Data() );
    } );
}

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »EuadeLuxe« (02.01.2015, 15:48)


485

02.01.2015, 18:18

Ich bin auch wegen des Singletons schockiert :D

BlueCobold

Community-Fossil

Beiträge: 10 859

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

486

02.01.2015, 18:55

Ja, irgendwie müffelt das alles ziemlich streng.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

487

02.01.2015, 20:34

Das mit dem Singleton ist nicht gerade meine größte Sorge. Mein Problem ist der MemberFunctionPointer. Aber von innerhalb eines Lambdas kommt man leider nicht an Friend-Funktionen ran, und ich weiß nicht, was besser ist: Friend-Funktionen, oder eine lange Parameter-Liste.

488

02.01.2015, 21:07

Naja, ich habe es jetzt auch umgebaut. Die Shader-Parameter bekommen die momentane RenderDescription als Zeiger übergeben, dadurch wird das ganze Konsstrukt auch eliminiert. Und nachdem ich einen Text über "Evil Singletons" gelesen hatte, wurde der RenderManager ganz schnell "ent-singleton-ifiziert". :/

C-/C++-Quelltext

1
2
3
4
5
if ( std::strcmp ( value, "MODELVIEW_MATRIX" ) == 0 ) {
    return new LambaShaderParam ( location, [] ( I32 location, const RenderDescription* desc ) {
        desc->getMaterial ()->getProgram ()->uniformMatrix ( location, desc->getModelView () );
    } );
}

489

11.01.2015, 20:48

C-/C++-Quelltext

1
2
3
4
5
6
7
void memcpy(void *dst, const void *src, uint32 size)
{
    byte *src0 = (byte*)src;
    byte *dst0 = (byte*)dst;
    while(size--)
        *src0++ = *dst0++;
}

Und darum, liebe Kinder, sollte man keine C-Casts verwenden :D

FSA

Community-Fossil

  • Private Nachricht senden

490

11.01.2015, 20:58

Das ist ja mal genial :D

Zitat

Der RCCSWU (RandomCamelCaseSomtimesWithUndersquare) Stil bricht auch mal mit den veralteten strukturierten Denkmustern und erlaubt dem Entwickler seine Kreativität zu entfalten.

Werbeanzeige