[win32/c++] opengl canvas provleem

Pagina: 1
Acties:

  • Krooswijk.com
  • Registratie: Mei 2000
  • Laatst online: 17-08-2024
hallo, ik ben bezig met een 3D app aan het bouwen. Nou werkt ie prima als je een oudere videokaart hebt , bv TNT2 , matrox.

Nou heb ik een raar probleem. Bij de nieuwere videokaarten komt het
tekencanvas niet naar voren, wat als gevolg heeft dat het 3D-model ook niet naar voren wil komen.

Nou heb ik de nieuwste nvidia drivers (opengl drivers) ook gedownload. Als ik die drivers weggooi werkt het allemaal weer. Maar het is natuurlijk de bedoeling dat ie ook werkt met de nieuwe drivers.

M'n vraag dus, enig idee waardoor dit komt? Heb het idee dat er niks mis gaat bij mijn open gl initialisatie, aangezien deze eerst goed werkte. zijn er hierin misschien essentiele zaken veranderd...

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 12:02

.oisyn

Moderator Devschuur®

Demotivational Speaker

M'n vraag dus, enig idee waardoor dit komt? Heb het idee dat er niks mis gaat bij mijn open gl initialisatie, aangezien deze eerst goed werkte. zijn er hierin misschien essentiele zaken veranderd...
Ah ja natuurlijk, je initialisatie code... Welke initialisatie code? Whoami heeft onze glazen bol laten vallen

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • Krooswijk.com
  • Registratie: Mei 2000
  • Laatst online: 17-08-2024
ok, jij zit dus blijkbaar wel in de implementatie richting te kijken, ik dacht meer aan de driver kant. hieronder volgt de code die ik gebruik bij initialisatie van de opengl:

C++:
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
GLvoid
RENDERING_ENGINE :: initialize_opengl_scene( )
/*
 *  Initializes OpenGL so everything can be drawn correctly.
 */
{
    /*
     *  Initializes shading mode
     */
    glShadeModel( GL_SMOOTH );

    /*
     *  Clearing the background with a color
     */
    glClearColor( 0.0f, 0.0f, 0.0f, 1.0f );

    /*
     *  Initializes depth buffer
     */
    glClearDepth( 1.0f );
    glEnable( GL_DEPTH_TEST );
    glDepthFunc( GL_LEQUAL );

    /*
     *  Initializing blending type
     */
    glBlendFunc( GL_SRC_ALPHA, GL_ONE );

    /*
     *  Perspective correction
     */
    glHint( GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST );
}

C++:
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
37
38
39
40
41
42
43
44
45
46
bool
3D_CONTROL :: initialize_rendering_context( )
/*
 *  Create drawing objects
 */
{
    /*
     *  Initialize variables
     */
    device_context = NULL;
    rendering_context = NULL;

    /*
     *  Set up the rendering context
     */
    if( !( device_context = GetDC( this->hwnd ) ) )
    {
        return( false );
    }

    /*
     *  Set up pixel format descriptor
     */
    if( !this->setup_pixelformat_descriptor( ) )
    {
        return( false );
    }

    /*
     *  Set up the rendering context
     */
    if( !( rendering_context = wglCreateContext( device_context ) ) )
    {
        return( false );
    }

    /*
     *  Link the rendering context to the device context
     */
    if( !wglMakeCurrent( device_context, rendering_context ) )
    {
        return( false );
    }

    return( true );
}

C++:
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
37
38
39
40
41
bool
3D_CONTROL :: setup_pixelformat_descriptor( )
/*
 *  Description of the pixel format of the drawing surface
 */
{
    int pixel_format;

    static PIXELFORMATDESCRIPTOR pixelformat_descriptor =
    {
        sizeof( PIXELFORMATDESCRIPTOR ),
        1,
        PFD_DRAW_TO_WINDOW | PFD_SUPPORT_OPENGL |
        PFD_DOUBLEBUFFER,
        PFD_TYPE_RGBA,
        this->color_depth,
        0, 0, 0, 0, 0, 0,
        0,
        0,
        0,
        0, 0, 0, 0,
        16,
        0,
        0,
        PFD_MAIN_PLANE,
        0,
        0, 0, 0
    };

    if( !( pixel_format = ChoosePixelFormat( device_context, &pixelformat_descriptor ) ) )
    {
        return( false );
    }

    if( !SetPixelFormat( device_context, pixel_format, &pixelformat_descriptor ) )
    {
        return( false );
    }

    return( true );
}


ik zat al misschien te denken aan de pixelformatdescriptor die moet worden aangepast aan de nieuwe drivers. ik zou alleen niet weten wat, misschien dat iemand een suggestie heeft?

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 12:02

.oisyn

Moderator Devschuur®

Demotivational Speaker

Krooswijk.com schreef op 18 november 2003 @ 14:07:
ok, jij zit dus blijkbaar wel in de implementatie richting te kijken, ik dacht meer aan de driver kant.
nou ja dat kan ik pas uitsluiten op het moment dat ik je initialisatie-code heb gezien, vandaar ;)

Er is volgens mij niets mis met je init code... Wat bedoel je eigenlijk met "je tekencanvas komt niet naar voren"? Bedoel je dat de window niet naar de voorgrond komt? Dat doe je toch gewoon met de win32 API functie ShowWindow () ?

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.