<?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[Frage zum OpenGL - Fenster!!!]]></title><description><![CDATA[<p>hi ich habe mich mal an die openGL ran gewagt hm nunja eigentlich geht alles nur etwas stört.. ich möchte ein schwarzes vollbild fenster erstellen... das komplett schwarz ist... doch beim erstellen ist dies net schwarz sondern oder bunt gepunktet und mit weissen hotizontalstreifen .... könnte mir jemmand sagen was an dem quelltext falsch ist???</p>
<pre><code class="language-cpp">//---------------------------------------------------------------------------

#include &lt;windows.h&gt;
#include &lt;gl\glaux.h&gt;
#include &lt;gl\glu.h&gt;
#include &lt;gl\gl.h&gt;

HDC hDC;
HGLRC hRC;
HWND hWnd;
HINSTANCE hInstance;

bool keys[256];
bool active = true;
bool fullscreen = true;

LRESULT CALLBACK WinProc( HWND, UINT, WPARAM, LPARAM );
GLvoid ReSizeGLScene( GLsizei ,GLsizei );
int InitGL();
int DrawGLScene();
GLvoid KillGLWindow();
bool CreateGLWindow( char *titel, int width, int height, int bits ,
                     bool fullscreenflag );

int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,
                    LPSTR lpCmdLine, int nCmdShow ) {

    MSG messages;

    if( MessageBox( NULL,
                    &quot;Soll das Programm im Vollbildmodus erstellt werden?&quot;,
                    &quot;Fenstereinstellung&quot;, MB_YESNO | MB_ICONQUESTION ) ==IDNO ) {

        fullscreen = false;
    }

    CreateGLWindow( &quot;OpenGL&quot;, 800, 600, 16, fullscreen );

    while( GetMessage( &amp;messages, 0, 0, 0 ) ) {

        TranslateMessage( &amp;messages );
        DispatchMessage( &amp;messages );

        DrawGLScene();
        SwapBuffers( hDC );

    }
    return messages.wParam;
}

GLvoid ReSizeGLScene( GLsizei width, GLsizei height ) {  // init OpenGL Fenster

    if( height == 0 ) {

        height = 1;
    }

    glViewport( 0, 0, width, height );  // mittelpkt. der perspetive wird 0/0 gesetzt
    glMatrixMode( GL_PROJECTION );  //festlegung der projectionsmatrix
    glLoadIdentity();   //anpassung der projection
    gluPerspective( 45.0f, ( GLfloat ) width / (GLfloat ) height, 0.1f, 100.0f );
        //verhältnis von hoehe und breite + verzerungswinkel von 45,0°
    glMatrixMode( GL_MODELVIEW );   // festlegunf der model-view matrix
    glLoadIdentity();    // anpassung der modele

}   // ende der init des OpenGL Fensters

int InitGL() {  //init der OpenGL

    glShadeModel( GL_SMOOTH );  // glSmooth sorgt fuer schoene farbübergänge auf körpern
    glClearColor( 0.0f, 0.0f, 0.0f, 0.0f ); // fensterBG per RGB + alphafactor( transparenz )
    glClearDepth( 1.0f ); // bewirkt das räumliche ausehen von uebereinander liegenden Objecten
    glEnable( GL_DEPTH_TEST ); // aktiviert den depth test
    glDepthFunc( GL_LEQUAL );   // der typ des depthtest wird festgelegt
    glHint( GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST );    //perspektive wird festgelegt

    return true;
}

int DrawGLScene() { // hier passieren alle zeichen aktionen

    glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );   // löscht vorigen bildshcirm fuer
                                                            // naechste scene
    glLoadIdentity();   // matrix wird wieder zurückgesetzt

    return true;
}

GLvoid KillGLWindow() {     // schliesst das GL Fenster

    if( fullscreen ) {

        ChangeDisplaySettings( 0, 0 );   // kehrt zum desktop zurück
        ShowCursor( true ); // abgeschalteter mauszeiger wird wieder sichtbat
    }

    hDC = NULL;
    hRC = NULL;
    hInstance = NULL;
    hWnd = NULL;
}

bool CreateGLWindow( char *titel, int width, int height, int bits ,
                     bool fullscreenflag ) {

    GLuint Pixelformat; // speichert pixelformat
    WNDCLASS wc;
    DWORD wndExStyle;   //speichert zusätzliche infos ueber das fenster
    DWORD wndStyle;     //speichert fenster eigenschaften
    RECT wndRect;   // hier wird die auflösung gespeichert

        wndRect.left = ( long ) 0;
        wndRect.top = ( long ) 0;
        wndRect.right = ( long ) width;
        wndRect.bottom = ( long ) height;

    fullscreen = fullscreenflag;
    hInstance = GetModuleHandle( 0 );

    wc.lpfnWndProc = WinProc;
    wc.cbClsExtra = 0;
    wc.cbWndExtra = 0;
    wc.hInstance = hInstance;
    wc.lpszMenuName = 0;
    wc.lpszClassName = &quot;OpenGL&quot;;
    wc.hIcon = LoadIcon( NULL, IDI_APPLICATION );
    wc.hCursor = LoadCursor( NULL, IDC_ARROW );
    wc.hbrBackground = NULL;
    wc.style = CS_HREDRAW | CS_VREDRAW | CS_OWNDC;

    RegisterClass( &amp;wc );

    if( fullscreen ) {      // soll fenster im Vollbildmodus laufen ?

        DEVMODE displaySettings;

        memset( &amp;displaySettings, 0, sizeof( displaySettings ) );

        displaySettings.dmSize = sizeof( displaySettings );
        displaySettings.dmPelsWidth = width;
        displaySettings.dmPelsHeight = height;
        displaySettings.dmBitsPerPel = bits;
        displaySettings.dmFields = DM_BITSPERPEL | DM_PELSWIDTH | DM_PELSHEIGHT;

        ChangeDisplaySettings( &amp;displaySettings, CDS_FULLSCREEN );
    }

    if( fullscreen ) {  // konnte in Vollbildmodus geschaltet werden

        wndExStyle = WS_EX_APPWINDOW;
        wndStyle = WS_POPUP;
        ShowCursor( false );
    }

    else {

        wndExStyle = WS_EX_APPWINDOW | WS_EX_WINDOWEDGE;    // window erhält 3D rahmen
        wndStyle = WS_OVERLAPPEDWINDOW;
    }

    // das verdecken des fensters durch schaltflaechen wird anoliert
    AdjustWindowRectEx( &amp;wndRect, wndStyle, false, wndExStyle );

    hWnd = CreateWindowEx( wndExStyle,
                           &quot;OpenGL&quot;,
                           &quot;Mein erstes OpenGL - Fenster&quot;,
                           WS_CLIPSIBLINGS | WS_CLIPCHILDREN | wndStyle,
                           0, 0,
                           wndRect.right - wndRect.left, wndRect.bottom - wndRect.top,
                           NULL,
                           NULL,
                           hInstance,
                           NULL );

    static PixelFormat;
    static PIXELFORMATDESCRIPTOR pfd = {

        sizeof( PIXELFORMATDESCRIPTOR ),
        1,  //versionnummer
        PFD_DRAW_TO_WINDOW |    // foramt muss im fenster sichtbar sien
        PFD_SUPPORT_OPENGL |    //unterstuetzt OpenGL
        PFD_DOUBLEBUFFER,       // doublebuffering wird unterstuetzt
        PFD_TYPE_RGBA,          // unterstuetzt RGB + alpha f.
        bits,                   // farbtiefe
        0, 0, 0, 0, 0, 0,
        0,                      // kein alphabuffer
        0,                      // shift bit ignoriet
        0,                      // kein accumulationsbuffer
        0, 0, 0, 0,
        16,                     // 16-Bit Depth-Buffer
        0,                      // kein stencil buffer
        0,                      // kein auxiliary buffer
        PFD_MAIN_PLANE,         // hauptebene auf der später gezeichnet wird
        0,                      // unwichtig
        0, 0, 0 };              // keine ebenenmasken benötigt

        hDC = GetDC( hWnd );

        PixelFormat = ChoosePixelFormat( hDC, &amp;pfd );   // sucht ein passendes PixelFormat
        SetPixelFormat( hDC, PixelFormat, &amp;pfd );       // verwendet PixelFormat

        wglMakeCurrent(hDC,hRC); // verucht hRC zu aktivieren

        ShowWindow( hWnd, SW_SHOW );    // zeigt fenster an
        SetForegroundWindow( hWnd );    // erhöt priorität des fensters
        SetFocus( hWnd );               // leitet keyboardbefele an das fenster
        ReSizeGLScene( width, height ); // aktiviert perspective

        InitGL();                       // läd die openGL ( texturen, lich .... )

        return true; // alles klappt
}

LRESULT CALLBACK WinProc( HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam ) {

    switch( message ) {

        case WM_ACTIVATE: {

            if( !HIWORD( wParam ) ) {   // ist das prog nicht minimiert

                active = true;
            }

            else {

                active = false;
            }
            return 0;
        }

        case WM_SIZE: {

            ReSizeGLScene( LOWORD( lParam ), HIWORD( lParam ) );
            return  0;
        }

        case WM_SYSCOMMAND: {   // ist ein systemcommand, wie zB.
                                // &quot;Bildschirmschoner soll gestartet werden!&quot;, vorhanden
            switch( wParam ) {

                case SC_SCREENSAVE:    // bildschirmschoner soll gestartet werden
                case SC_MONITORPOWER:   // monitor soll in standby
                return 0;               // für beide fälle liefer NULL zurück
            }
            return 0;
        }

        case WM_KEYDOWN: {

            keys[wParam] = true;

            if( keys[VK_F1] ) {

                keys[VK_F1] = false;
                KillGLWindow();

                fullscreen =! fullscreen;
                return 0;
            }

            if( keys[VK_ESCAPE] ) {

                SendMessage( hWnd, WM_DESTROY, 0, 0 );
                return 0;
            }
            return 0;
        }

        case WM_KEYUP: {

            keys[wParam] = false;
            return 0;
        }

        case WM_DESTROY: {

            KillGLWindow();
            PostQuitMessage( 0 );
            return 0;
        }
    }
    return DefWindowProc( hWnd, message, wParam, lParam );
}
</code></pre>
<p>gibt es eine einfachere variante ein openGL fenster zu erstellen, könnt eich an meinen code was weglassen????<br />
danke, für kommende antworten.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/155861/frage-zum-opengl-fenster</link><generator>RSS for Node</generator><lastBuildDate>Thu, 23 Jul 2026 09:48:52 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/155861.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 10 Aug 2006 12:57:45 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Frage zum OpenGL - Fenster!!! on Thu, 10 Aug 2006 12:57:45 GMT]]></title><description><![CDATA[<p>hi ich habe mich mal an die openGL ran gewagt hm nunja eigentlich geht alles nur etwas stört.. ich möchte ein schwarzes vollbild fenster erstellen... das komplett schwarz ist... doch beim erstellen ist dies net schwarz sondern oder bunt gepunktet und mit weissen hotizontalstreifen .... könnte mir jemmand sagen was an dem quelltext falsch ist???</p>
<pre><code class="language-cpp">//---------------------------------------------------------------------------

#include &lt;windows.h&gt;
#include &lt;gl\glaux.h&gt;
#include &lt;gl\glu.h&gt;
#include &lt;gl\gl.h&gt;

HDC hDC;
HGLRC hRC;
HWND hWnd;
HINSTANCE hInstance;

bool keys[256];
bool active = true;
bool fullscreen = true;

LRESULT CALLBACK WinProc( HWND, UINT, WPARAM, LPARAM );
GLvoid ReSizeGLScene( GLsizei ,GLsizei );
int InitGL();
int DrawGLScene();
GLvoid KillGLWindow();
bool CreateGLWindow( char *titel, int width, int height, int bits ,
                     bool fullscreenflag );

int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,
                    LPSTR lpCmdLine, int nCmdShow ) {

    MSG messages;

    if( MessageBox( NULL,
                    &quot;Soll das Programm im Vollbildmodus erstellt werden?&quot;,
                    &quot;Fenstereinstellung&quot;, MB_YESNO | MB_ICONQUESTION ) ==IDNO ) {

        fullscreen = false;
    }

    CreateGLWindow( &quot;OpenGL&quot;, 800, 600, 16, fullscreen );

    while( GetMessage( &amp;messages, 0, 0, 0 ) ) {

        TranslateMessage( &amp;messages );
        DispatchMessage( &amp;messages );

        DrawGLScene();
        SwapBuffers( hDC );

    }
    return messages.wParam;
}

GLvoid ReSizeGLScene( GLsizei width, GLsizei height ) {  // init OpenGL Fenster

    if( height == 0 ) {

        height = 1;
    }

    glViewport( 0, 0, width, height );  // mittelpkt. der perspetive wird 0/0 gesetzt
    glMatrixMode( GL_PROJECTION );  //festlegung der projectionsmatrix
    glLoadIdentity();   //anpassung der projection
    gluPerspective( 45.0f, ( GLfloat ) width / (GLfloat ) height, 0.1f, 100.0f );
        //verhältnis von hoehe und breite + verzerungswinkel von 45,0°
    glMatrixMode( GL_MODELVIEW );   // festlegunf der model-view matrix
    glLoadIdentity();    // anpassung der modele

}   // ende der init des OpenGL Fensters

int InitGL() {  //init der OpenGL

    glShadeModel( GL_SMOOTH );  // glSmooth sorgt fuer schoene farbübergänge auf körpern
    glClearColor( 0.0f, 0.0f, 0.0f, 0.0f ); // fensterBG per RGB + alphafactor( transparenz )
    glClearDepth( 1.0f ); // bewirkt das räumliche ausehen von uebereinander liegenden Objecten
    glEnable( GL_DEPTH_TEST ); // aktiviert den depth test
    glDepthFunc( GL_LEQUAL );   // der typ des depthtest wird festgelegt
    glHint( GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST );    //perspektive wird festgelegt

    return true;
}

int DrawGLScene() { // hier passieren alle zeichen aktionen

    glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );   // löscht vorigen bildshcirm fuer
                                                            // naechste scene
    glLoadIdentity();   // matrix wird wieder zurückgesetzt

    return true;
}

GLvoid KillGLWindow() {     // schliesst das GL Fenster

    if( fullscreen ) {

        ChangeDisplaySettings( 0, 0 );   // kehrt zum desktop zurück
        ShowCursor( true ); // abgeschalteter mauszeiger wird wieder sichtbat
    }

    hDC = NULL;
    hRC = NULL;
    hInstance = NULL;
    hWnd = NULL;
}

bool CreateGLWindow( char *titel, int width, int height, int bits ,
                     bool fullscreenflag ) {

    GLuint Pixelformat; // speichert pixelformat
    WNDCLASS wc;
    DWORD wndExStyle;   //speichert zusätzliche infos ueber das fenster
    DWORD wndStyle;     //speichert fenster eigenschaften
    RECT wndRect;   // hier wird die auflösung gespeichert

        wndRect.left = ( long ) 0;
        wndRect.top = ( long ) 0;
        wndRect.right = ( long ) width;
        wndRect.bottom = ( long ) height;

    fullscreen = fullscreenflag;
    hInstance = GetModuleHandle( 0 );

    wc.lpfnWndProc = WinProc;
    wc.cbClsExtra = 0;
    wc.cbWndExtra = 0;
    wc.hInstance = hInstance;
    wc.lpszMenuName = 0;
    wc.lpszClassName = &quot;OpenGL&quot;;
    wc.hIcon = LoadIcon( NULL, IDI_APPLICATION );
    wc.hCursor = LoadCursor( NULL, IDC_ARROW );
    wc.hbrBackground = NULL;
    wc.style = CS_HREDRAW | CS_VREDRAW | CS_OWNDC;

    RegisterClass( &amp;wc );

    if( fullscreen ) {      // soll fenster im Vollbildmodus laufen ?

        DEVMODE displaySettings;

        memset( &amp;displaySettings, 0, sizeof( displaySettings ) );

        displaySettings.dmSize = sizeof( displaySettings );
        displaySettings.dmPelsWidth = width;
        displaySettings.dmPelsHeight = height;
        displaySettings.dmBitsPerPel = bits;
        displaySettings.dmFields = DM_BITSPERPEL | DM_PELSWIDTH | DM_PELSHEIGHT;

        ChangeDisplaySettings( &amp;displaySettings, CDS_FULLSCREEN );
    }

    if( fullscreen ) {  // konnte in Vollbildmodus geschaltet werden

        wndExStyle = WS_EX_APPWINDOW;
        wndStyle = WS_POPUP;
        ShowCursor( false );
    }

    else {

        wndExStyle = WS_EX_APPWINDOW | WS_EX_WINDOWEDGE;    // window erhält 3D rahmen
        wndStyle = WS_OVERLAPPEDWINDOW;
    }

    // das verdecken des fensters durch schaltflaechen wird anoliert
    AdjustWindowRectEx( &amp;wndRect, wndStyle, false, wndExStyle );

    hWnd = CreateWindowEx( wndExStyle,
                           &quot;OpenGL&quot;,
                           &quot;Mein erstes OpenGL - Fenster&quot;,
                           WS_CLIPSIBLINGS | WS_CLIPCHILDREN | wndStyle,
                           0, 0,
                           wndRect.right - wndRect.left, wndRect.bottom - wndRect.top,
                           NULL,
                           NULL,
                           hInstance,
                           NULL );

    static PixelFormat;
    static PIXELFORMATDESCRIPTOR pfd = {

        sizeof( PIXELFORMATDESCRIPTOR ),
        1,  //versionnummer
        PFD_DRAW_TO_WINDOW |    // foramt muss im fenster sichtbar sien
        PFD_SUPPORT_OPENGL |    //unterstuetzt OpenGL
        PFD_DOUBLEBUFFER,       // doublebuffering wird unterstuetzt
        PFD_TYPE_RGBA,          // unterstuetzt RGB + alpha f.
        bits,                   // farbtiefe
        0, 0, 0, 0, 0, 0,
        0,                      // kein alphabuffer
        0,                      // shift bit ignoriet
        0,                      // kein accumulationsbuffer
        0, 0, 0, 0,
        16,                     // 16-Bit Depth-Buffer
        0,                      // kein stencil buffer
        0,                      // kein auxiliary buffer
        PFD_MAIN_PLANE,         // hauptebene auf der später gezeichnet wird
        0,                      // unwichtig
        0, 0, 0 };              // keine ebenenmasken benötigt

        hDC = GetDC( hWnd );

        PixelFormat = ChoosePixelFormat( hDC, &amp;pfd );   // sucht ein passendes PixelFormat
        SetPixelFormat( hDC, PixelFormat, &amp;pfd );       // verwendet PixelFormat

        wglMakeCurrent(hDC,hRC); // verucht hRC zu aktivieren

        ShowWindow( hWnd, SW_SHOW );    // zeigt fenster an
        SetForegroundWindow( hWnd );    // erhöt priorität des fensters
        SetFocus( hWnd );               // leitet keyboardbefele an das fenster
        ReSizeGLScene( width, height ); // aktiviert perspective

        InitGL();                       // läd die openGL ( texturen, lich .... )

        return true; // alles klappt
}

LRESULT CALLBACK WinProc( HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam ) {

    switch( message ) {

        case WM_ACTIVATE: {

            if( !HIWORD( wParam ) ) {   // ist das prog nicht minimiert

                active = true;
            }

            else {

                active = false;
            }
            return 0;
        }

        case WM_SIZE: {

            ReSizeGLScene( LOWORD( lParam ), HIWORD( lParam ) );
            return  0;
        }

        case WM_SYSCOMMAND: {   // ist ein systemcommand, wie zB.
                                // &quot;Bildschirmschoner soll gestartet werden!&quot;, vorhanden
            switch( wParam ) {

                case SC_SCREENSAVE:    // bildschirmschoner soll gestartet werden
                case SC_MONITORPOWER:   // monitor soll in standby
                return 0;               // für beide fälle liefer NULL zurück
            }
            return 0;
        }

        case WM_KEYDOWN: {

            keys[wParam] = true;

            if( keys[VK_F1] ) {

                keys[VK_F1] = false;
                KillGLWindow();

                fullscreen =! fullscreen;
                return 0;
            }

            if( keys[VK_ESCAPE] ) {

                SendMessage( hWnd, WM_DESTROY, 0, 0 );
                return 0;
            }
            return 0;
        }

        case WM_KEYUP: {

            keys[wParam] = false;
            return 0;
        }

        case WM_DESTROY: {

            KillGLWindow();
            PostQuitMessage( 0 );
            return 0;
        }
    }
    return DefWindowProc( hWnd, message, wParam, lParam );
}
</code></pre>
<p>gibt es eine einfachere variante ein openGL fenster zu erstellen, könnt eich an meinen code was weglassen????<br />
danke, für kommende antworten.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1114577</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1114577</guid><dc:creator><![CDATA[T0bi]]></dc:creator><pubDate>Thu, 10 Aug 2006 12:57:45 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zum OpenGL - Fenster!!! on Thu, 10 Aug 2006 15:17:25 GMT]]></title><description><![CDATA[<p>In der Funktion CreateWindow(...) fehlt was.</p>
<pre><code class="language-cpp">SetPixelFormat( hDC, PixelFormat, &amp;pfd );       // verwendet PixelFormat

        hRC = wglCreateContext(hDC);  // &lt;-- fehlte.

        wglMakeCurrent(hDC,hRC); // verucht hRC zu aktivieren
</code></pre>
<p>Bei mir hats danach funktioniert.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1114694</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1114694</guid><dc:creator><![CDATA[Platy]]></dc:creator><pubDate>Thu, 10 Aug 2006 15:17:25 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zum OpenGL - Fenster!!! on Thu, 10 Aug 2006 22:18:35 GMT]]></title><description><![CDATA[<p>oki alle sklar werds schnell fixen gg... danke</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1114915</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1114915</guid><dc:creator><![CDATA[T0bi]]></dc:creator><pubDate>Thu, 10 Aug 2006 22:18:35 GMT</pubDate></item></channel></rss>