IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

OpenGL Discussion :

[PBUFFER][INTEL 945G] Pbuffers non supportés?


Sujet :

OpenGL

  1. #1
    Membre chevronné
    Inscrit en
    Février 2008
    Messages
    413
    Détails du profil
    Informations personnelles :
    Âge : 45

    Informations forums :
    Inscription : Février 2008
    Messages : 413
    Par défaut [PBUFFER][INTEL 945G] Pbuffers non supportés?
    Bonjour,

    j'utilise en général les FBOs pour tout ce qui est offscreen rendering, mais mon programme actuel doit tourner sur une machine de m.... disposant du fantastique intel 945G (du vrai bonheur à programmer tout ca...bah au moins j'apprends des trucs

    Bref, en utilisant le très bon GLView j'ai pu vérifier que les FBOs ne sont pas supportés, mais que les Pbuffer le sont.

    Après m'être battu pour faire tourner les Pbuffer sur ma machine de développement, j'ai été pas mal refroidi en voyant que ca ne tourne pas sur l'autre (celle avec l'Intel 945G).

    Un peu de débugging me montre que c'est qui retourne 0, donc c'est là que ca foire. Par contre un GlGetError juste après ne me sort aucune erreur et du coup je ne sais pas trop où chercher. J'ai vérifié le nombre de pixel formats valides et il y en a au moins un.

    Comme dit, ca tourne sur mon ordi de développement, donc le code est correct à priori (aux détails près des pixel formats, mais comme dit il m'en trouve au moins un sur la machine de test).

    J'ai pensé aux drivers, mais vu que GLView me dit que les extensions sont supportées ca ne doit pas venir de là, si?
    Le probleme est que je nme peux pas mettre à jour ces drivers. C'est un ordi Dell et seuls les drivers Dell acceptent de s'installer. J'ai pû passer hier d'une version 2005 à une de 2006, mais pas au delà (alors qu'Intel continue d'updater les drivers pour la 945G....merci Dell).
    Bref, si il y a une chance que ca vienne de là, peut-on contourner le probleme d'installation des drivers (par exemple comme avec les omega sur un ordi portable)?

    Voilà mon code de création du pbuffer:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
     
    g_pbuffer.hPBuffer = NULL;
    g_pbuffer.nWidth   = m_originalTexture->Width;
    g_pbuffer.nHeight  = m_originalTexture->Height;
     
    //
    // Define the minimum pixel format requirements we will need for our 
    // p-buffer. A p-buffer is just like a frame buffer, it can have a depth 
    // buffer associated with it and it can be double buffered.
    //
    int pf_attr[] =
    {
    	WGL_SUPPORT_OPENGL_ARB, TRUE,       // P-buffer will be used with OpenGL
    	WGL_DRAW_TO_PBUFFER_ARB, TRUE,      // Enable render to p-buffer
    	WGL_RED_BITS_ARB, 8,                // At least 8 bits for RED channel
    	WGL_GREEN_BITS_ARB, 8,              // At least 8 bits for GREEN channel
    	WGL_BLUE_BITS_ARB, 8,               // At least 8 bits for BLUE channel
    	WGL_ALPHA_BITS_ARB, 8,              // At least 8 bits for ALPHA channel
    	WGL_DEPTH_BITS_ARB, 16,             // At least 16 bits for depth buffer
    	WGL_DOUBLE_BUFFER_ARB, FALSE,       // We don't require double buffering
    	0                                   // Zero terminates the list
    	};
     
    	unsigned int count = 0;
    	int pixelFormat;
     
    	HDC		g_hDC = wglGetCurrentDC();
    	HDC		oldDC = wglGetCurrentDC();
    	HGLRC	oldRC = wglGetCurrentContext();
     
    	wglChoosePixelFormatARB( g_hDC,(const int*)pf_attr, NULL, 1, &pixelFormat, &count);
     
    	if( count == 0 )
    	{
    		MessageBox(NULL,"Could not find an acceptable pixel format!",
    			"ERROR",MB_OK|MB_ICONEXCLAMATION);
    		exit(-1);
    	}
     
    	//
    	// Create a generic p-buffer...
    	//
    	g_pbuffer.hPBuffer = wglCreatePbufferARB( g_hDC, pixelFormat, g_pbuffer.nWidth, g_pbuffer.nHeight, NULL );
     
    	if( !g_pbuffer.hPBuffer )
    	{
    		MessageBox(NULL,"Could not create the p-buffer",
    			"ERROR",MB_OK|MB_ICONEXCLAMATION);
     
    		DWORD err = GetLastError();
     
    		// Create corresponding file
    		FILE *logFile = NULL;
    		fopen_s(&logFile, "C:\\temp\\2DGlassLog.txt", "w");
     
    		if(logFile)
    		{
    			fprintf(logFile, "Pixel formats count: %d\n", count );
     
    	       fprintf(logFile, "pbuffer creation error:  wglCreatePbufferARB() failed\n" );
     
    		   if		(err == ERROR_INVALID_PIXEL_FORMAT) fprintf(logFile, "error:  ERROR_INVALID_PIXEL_FORMAT\n" );
    		   else if	(err == ERROR_NO_SYSTEM_RESOURCES)	fprintf(logFile, "error:  ERROR_NO_SYSTEM_RESOURCES\n" );
    		   else if	(err == ERROR_INVALID_DATA)			fprintf(logFile, "error:  ERROR_INVALID_DATA\n" );
    		   fclose(logFile);
    		}
    		exit(-1);
    	}
     
    	g_pbuffer.hDC      = wglGetPbufferDCARB( g_pbuffer.hPBuffer );
    	g_pbuffer.hRC      = wglCreateContext( g_pbuffer.hDC );
     
    	//
    	// We were successful in creating a p-buffer. We can now make its context 
    	// current and set it up just like we would a regular context 
    	// attached to a window.
    	//
     
    	if( !wglMakeCurrent( g_pbuffer.hDC, g_pbuffer.hRC ) ) 
    	{
    		MessageBox(NULL,"Could not make the p-buffer's context current!",
    			"ERROR",MB_OK|MB_ICONEXCLAMATION);
    		exit(-1);
    	}
    Et voilà le raport que me donne GLView (NOTE: quand j'essaie de lancer un test de pbuffers avec GLView, ca plante au moment de trouver un pixel format...alors que dans mon programme ca (au moins) , ca marche...bizarre...)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
     
    Renderer: Intel 945G
    Vendor: Intel
    Memory: 224 MB
    Version: 1.4.0 - Build 4.14.10.4543
    Shading language version: N/A
    Max number of light sources: 16
    Max viewport size: 2048 x 2048
    Max texture size: 2048 x 2048
    Max anisotropy: 4
    Max samples: 0
    Max draw buffers: 0
    Max texture coordinates: 8
    Max vertex texture image units: 0
     
     
    Extensions: 52
     
    GL_3DFX_texture_compression_FXT1
    GL_ARB_depth_texture
    GL_ARB_fragment_program
    GL_ARB_multitexture
    GL_ARB_point_parameters
    GL_ARB_shadow
    GL_ARB_texture_border_clamp
    GL_ARB_texture_compression
    GL_ARB_texture_cube_map
    GL_ARB_texture_env_add
    GL_ARB_texture_env_combine
    GL_ARB_texture_env_crossbar
    GL_ARB_texture_env_dot3
    GL_ARB_transpose_matrix
    GL_ARB_vertex_buffer_object
    GL_ARB_vertex_program
    GL_ARB_window_pos
    GL_EXT_abgr
    GL_EXT_bgra
    GL_EXT_blend_color
    GL_EXT_blend_func_separate
    GL_EXT_blend_minmax
    GL_EXT_blend_subtract
    GL_EXT_clip_volume_hint
    GL_EXT_compiled_vertex_array
    GL_EXT_cull_vertex
    GL_EXT_draw_range_elements
    GL_EXT_fog_coord
    GL_EXT_multi_draw_arrays
    GL_EXT_packed_pixels
    GL_EXT_rescale_normal
    GL_EXT_secondary_color
    GL_EXT_separate_specular_color
    GL_EXT_shadow_funcs
    GL_EXT_stencil_two_side
    GL_EXT_stencil_wrap
    GL_EXT_texture3D
    GL_EXT_texture_compression_s3tc
    GL_EXT_texture_env_add
    GL_EXT_texture_env_combine
    GL_EXT_texture_filter_anisotropic
    GL_IBM_texture_mirrored_repeat
    GL_NV_blend_square
    GL_NV_texgen_reflection
    GL_SGIS_generate_mipmap
    GL_WIN_swap_hint
    WGL_ARB_buffer_region
    WGL_ARB_extensions_string
    WGL_ARB_make_current_read
    WGL_ARB_pbuffer
    WGL_ARB_pixel_format
    WGL_EXT_swap_control
     
    Core features
    v1.1 (100 % - 7/7)
    v1.2 (100 % - 8/8)
    v1.3 (100 % - 9/9)
    v1.4 (100 % - 15/15)
    v1.5 (66 % - 2/3)
    v2.0 (10 % - 1/10)
    v2.1 (0 % - 0/3)
     
    OpenGL driver version check (Current: 6.14.10.4299, Latest known: 6.14.10.4543):
    Outdated version of display drivers detected
    According the database, you are might be not using the latest version of display drivers for your video card.
     
    Compiled vertex array support
    This feature improves OpenGL performance by using video memory to cache transformed vertices.
     
    Multitexture support
    This feature accelerates complex rendering such as lightmaps or environment mapping.
     
    Secondary color support
    This feature provides an alternate method of coloring specular highlights on polygons.
     
    S3TC compression support
    This feature improves texture mapping performance in some applications by using lossy compression.
     
    No texture edge clamp support
    This feature adds clamping control to edge texel filtering. Some programs may not render textures correctly (black line on borders.)
     
    Vertex program support
    This feature enables a wide variety of effects via flexible vertex programming (equivalent to DX8 Vertex Shader.)
     
    Fragment program support
    This feature enables a wide variety of effects via per pixel programming (equivalent to DX9 Pixel Shader.)
     
    Texture anisotropic filtering support
    This feature improves the quality of texture mapping on oblique surfaces.
     
    No OpenGL Shading Language support
    This may break compatibility for applications using per pixel shading.
     
    No Frame buffer object support
    This may break compatibility for applications using render to texture functions.
     
    Extension verification: 
    GL_ARB_imaging was not found, but has the entry point glBlendEquation 
    WGL_EXT_extensions_string was not found, but has the entry point wglGetExtensionsStringEXT 
    GL_EXT_texture_lod_bias was not found, but is available in driver version 6.14.10.4859 
    GL_SGIS_texture_edge_clamp was not found, but is available in driver version 6.14.10.4859 
    GL_SGIS_texture_lod was not found, but is available in driver version 6.14.10.4859 
    WGL_EXT_extensions_string was not found, but is available in driver version 6.14.10.4859
    Merci d'avance à tous ceux qui pourront m'aider!

  2. #2
    Membre chevronné
    Inscrit en
    Février 2008
    Messages
    413
    Détails du profil
    Informations personnelles :
    Âge : 45

    Informations forums :
    Inscription : Février 2008
    Messages : 413
    Par défaut
    Petite update:

    après quelques tours de passe-passe j'ai réussi à mettre les drivers à jour à partir des dernier dispos sur le site d'Intel. (6.14.10.4926 - Fevrier 08)

    Malheureusement ca ne résoud pas le problème...
    Je pense donc que ca vient du pixel format que je spécifie mais j'avoue que je suis un peu perdu à ce niveau...

  3. #3
    Membre Expert
    Avatar de shenron666
    Homme Profil pro
    avancé
    Inscrit en
    Avril 2005
    Messages
    2 577
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : avancé

    Informations forums :
    Inscription : Avril 2005
    Messages : 2 577
    Par défaut
    je ne connait pas les pixels buffers car jamais utilisés
    en plus, utiliser une extension aussi importante sur de l'Intel enfin quand on n'a pas le choix...

    est-ce que tu as essayé un "pixelformat" identique à celui de ton affichage ?

    essaies aussi en passant le depth buffer en 24bits plutot que 16

    sinon essaies de regarder cet exemple : Off-screen Rendering Using Pixel Buffers
    Tutoriels OpenGL
    Je ne répondrai à aucune question en MP
    - Si c'est simple tu dis que c'est compliqué et tu le fait
    - Si c'est compliqué tu dis que c'est simple et tu le sous-traite ou le fait faire par un stagiaire.

  4. #4
    Membre chevronné
    Inscrit en
    Février 2008
    Messages
    413
    Détails du profil
    Informations personnelles :
    Âge : 45

    Informations forums :
    Inscription : Février 2008
    Messages : 413
    Par défaut
    en plus, utiliser une extension aussi importante sur de l'Intel enfin quand on n'a pas le choix...
    crois-moi je m'en passerai bien... Mais au nom de la sacro sainte rétrocompatibilité on se retrouve à programmer comme y a 15 ans....

    est-ce que tu as essayé un "pixelformat" identique à celui de ton affichage ?

    essaies aussi en passant le depth buffer en 24bits plutot que 16
    J'ai essayé les deux, même résultat...MAIS j'ai remarqué au passage que certains formats créent une erreur lors de l'appel de Donc, dans mon cas "normal" il trouve bel et bien au moins un PF qui passe, et le probleme doit être ailleurs....

    Sinon ton exemple c'est celui sur lequel je me suis basé pour faire mon prog, mais merci quand même

  5. #5
    Membre Expert
    Avatar de shenron666
    Homme Profil pro
    avancé
    Inscrit en
    Avril 2005
    Messages
    2 577
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : avancé

    Informations forums :
    Inscription : Avril 2005
    Messages : 2 577
    Par défaut
    l'exemple dont tu t'es inspiré, c'est la version 2 ou la version 3 ?
    de mon côté j'ai un chip Intel Q963/Q965
    la version 3 ne fonctionne pas, WGL_ARB_render_texture n'est pas supporté
    la version 2 quand à elle fonctionne

    si vraiment ça ne veux pas fonctionner, il te reste toujours la version 1 à grand renforts de ReadPixels
    Tutoriels OpenGL
    Je ne répondrai à aucune question en MP
    - Si c'est simple tu dis que c'est compliqué et tu le fait
    - Si c'est compliqué tu dis que c'est simple et tu le sous-traite ou le fait faire par un stagiaire.

  6. #6
    Membre chevronné
    Inscrit en
    Février 2008
    Messages
    413
    Détails du profil
    Informations personnelles :
    Âge : 45

    Informations forums :
    Inscription : Février 2008
    Messages : 413
    Par défaut
    l'exemple dont tu t'es inspiré, c'est la version 2 ou la version 3 ?
    Ni l'une ni l'autre: j'utilise la version 1

    Comme pour toi WGL_ARB_render_texture n'est pas supporté donc la 3 j'ai vite oublié. Et vu que la 2 est une optimisation de la 1 je me suis dit que j'allais commencer simple (heureusement en fait...vu comment je galère .

    Mais dans les 3 cas, la différence se situe au niveau du transfert de données du buffer vers une texture. Or mon probleme c'est la création du buffer, donc changer de méthode ne changera rien.

    tiens je vais essayer de faire tourner l'exemple 1 (celui du site) sur la machine de test...si ca foire je crois que je vais tout simplement laisser tomber certaines fonctionnalités de mon programme quand il tourne sur des PC "en carton", faut pas déconner...

    Dans tous les cas merci de t'intéresser à mon problème!

  7. #7
    Membre Expert

    Profil pro
    Programmeur
    Inscrit en
    Août 2002
    Messages
    1 091
    Détails du profil
    Informations personnelles :
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Programmeur

    Informations forums :
    Inscription : Août 2002
    Messages : 1 091
    Par défaut
    Désolé pas d'autres conseils que de larguer le portable avec Intel Graphics intégré.. (et de déconseiller quiconque d'acheter ce genre de PC).

    Bonne chance
    LeGreg

    Mon site web | Mon blog | Mes photos | Groupe USA
    > BONJOUR, JE SUIS NOUVEAU SUR CE FORUM
    > presse la touche caps lock, stp
    > OH.. MERCI C EST BEAUCOUP PLUS FACILE COMME CA

  8. #8
    Membre chevronné
    Inscrit en
    Février 2008
    Messages
    413
    Détails du profil
    Informations personnelles :
    Âge : 45

    Informations forums :
    Inscription : Février 2008
    Messages : 413
    Par défaut
    tiens je vais essayer de faire tourner l'exemple 1 (celui du site) sur la machine de test...si ca foire je crois que je vais tout simplement laisser tomber certaines fonctionnalités de mon programme quand il tourne sur des PC "en carton", faut pas déconner...
    fallait s'en douter....ca marche! Donc les pBuffers sont bien supportés par la 945G et le problème vient de mon code...GRRRR!

  9. #9
    Membre chevronné
    Inscrit en
    Février 2008
    Messages
    413
    Détails du profil
    Informations personnelles :
    Âge : 45

    Informations forums :
    Inscription : Février 2008
    Messages : 413
    Par défaut
    Je me permets de "relancer" le sujet car je galère toujours avec mes pbuffers...

    pour résumer le problème:
    - ca marche sur mon ordi de développement (NVidia quadro FX)
    - ca plante sur la machine de test (Intel 945G), au moment de la création du buffer (mais PAS lors de la recherche d'un pixel format, il en trouve au moins un)
    - Un appel à GetLastError() juste apres ne m'apprends rien de plus....

    Je n'avance plus depuis 3 jours et ca commence à sérieusement m'énnerver.
    Je me suis basé sur cet exemple Off-screen Rendering Using Pixel Buffers, qui d'ailleurs tourne sans probleme sur la machine de test.

    1) Est-il possible que le problème vienne de mon HWND / HDC? je n'utilise pas, comme dans l'exemple, de fenetre à proprement parler. A la place j'ai un contrôle ActiveX donc je récupère le HWND

    2) Est ce que ca pourrait venir de GLEW? J'utilise ca pour gérer les extensions....

    A part ca je suis à court d'idées et mon code est très proche de l'exemple... Si quelqu'un s'y connait un minimum en pBuffers, à l'aiiiiiiiide!!!

  10. #10
    Membre Expert
    Avatar de shenron666
    Homme Profil pro
    avancé
    Inscrit en
    Avril 2005
    Messages
    2 577
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : avancé

    Informations forums :
    Inscription : Avril 2005
    Messages : 2 577
    Par défaut
    et si tu adaptais progressivement l'exemple à ta conception ?
    - utiliser un controle activex -> vérifier que ça fonctionne toujours
    - utiliser glew -> vérifier que ça fonctionne
    - intégrer ta façon de créer le pbuffer -> vérifier...
    ect...

    tu trouveras peut-etre la source de ton probème comme cela
    Tutoriels OpenGL
    Je ne répondrai à aucune question en MP
    - Si c'est simple tu dis que c'est compliqué et tu le fait
    - Si c'est compliqué tu dis que c'est simple et tu le sous-traite ou le fait faire par un stagiaire.

  11. #11
    Membre chevronné
    Inscrit en
    Février 2008
    Messages
    413
    Détails du profil
    Informations personnelles :
    Âge : 45

    Informations forums :
    Inscription : Février 2008
    Messages : 413
    Par défaut
    Re, et avant tout merci à tous pour vos suggestions...ca a fini par payer!

    J'ai pu rapidement exclure GLEW de la liste des suspects (heureusement, ce serait un comble....), restait donc à regarder du côté de la gestion des contexte et compagnie...

    Et là suprise: c'est mon loader de textures qui posait problème! En gros il charge les BMP en créant une DIB section, ce qui nécessite la création d'un nouveau DC. C'est une partie du projet que j'ai récupérée telle quelle, et comme sur la plupart des ordis ca ne posait pas de probleme....
    Mais apparement les chip Intel n'aiment pas trop les changements de DC à tout va (j'ai d'ailleurs trouvé un article lá dessus ce matin mais je n'arrive plus à mettre la main dessus... au cas où je reposterai).

    Ma solution temporaire est de charger la texture plus tard, apres la creation du pbuffer, mais je me demande si je ne ferai pas mieux d'utiliser une libraire d'imagerie pour gérer les textures....

    J'ai lû à plusieurs reprises que devIL est pas mal, sinon je pensais à glAux mais je ne sais pas si ca vaut encore le coup...que me suggerez-vous?

    Pour info voici le loader de texture dont j'aimerais bien me débarasser (perso ca me parait très lourd pour charger une image mais j'avoue que je ne suis pas un expert là dessus donc tant que ca marchait....
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    BOOL BGLTextureManager::BuildTexture(GLTexture *glTexture)
    {
    	HDC			hdcTemp;											// The DC to hold our bitmap
    	HBITMAP		hbmpTemp;											// Holds the bitmap temporarily
    	IPicture	*picture;											// IPicture interface
    	OLECHAR		wcharPath[MAX_PATH+1];								// Full path to picture (WCHAR)
    	long		width, height, widthPix, heightPix, numPix;			// Width & height of the picture, in logical units and in pixels
    	GLint		maxTexSize;											// Maximum supported texture Size
     
    	// Convert from ASCII to unicode
    	MultiByteToWideChar(CP_ACP, 0, glTexture->FileName.GetText(), -1, wcharPath, MAX_PATH);	
     
    	// Create a new picture object using IID_IPicture interface. 
    	// pPicture is the pointer to this interface.
    	// Quit if loading fails
    	if(FAILED(OleLoadPicturePath(wcharPath, NULL, 0, 0, IID_IPicture, (void**)&picture)))					
    		return FALSE;													
     
    	// Create The Windows Compatible Device Context
    	// Quit if it fails
    	hdcTemp = CreateCompatibleDC(GetDC(0));								
    	if(!hdcTemp)														
    	{
    		picture->Release(); // Decrements IPicture Reference Count											
    		return FALSE;													
    	}
     
    	// Get Maximum Texture Size Supported
    	glGetIntegerv(GL_MAX_TEXTURE_SIZE, &maxTexSize);					
     
    	// Get IPicture width (resp. height) & convert to pixels
    	picture->get_Width(&width);		
    	picture->get_Height(&height);	
    	widthPix		= MulDiv(width, GetDeviceCaps(hdcTemp, LOGPIXELSX), 2540);
    	heightPix		= MulDiv(height, GetDeviceCaps(hdcTemp, LOGPIXELSY), 2540);
     
    	// Resize image to the closest power of two 
    	widthPix  = ResizeToPow2(widthPix, maxTexSize);
    	heightPix = ResizeToPow2(heightPix, maxTexSize);
     
    	// If low quality textures are enabled, reduce the picture's size 
    	if ((!m_hiQualityTexturesEnabled) && (widthPix > 64))
    	{
    		widthPix	/= 2;
    		heightPix	/= 2;
    	}
     
    	// Total number of pixels
    	numPix = widthPix * heightPix;
     
    	//	Create a temporary Bitmap
    	BITMAPINFO	bi = {0};												// Bitmap type 
    	DWORD		*pBits = 0;												// Pointer to the bitmap bits
     
    	bi.bmiHeader.biSize			= sizeof(BITMAPINFOHEADER);				// Set Structure Size
    	bi.bmiHeader.biBitCount		= 32;									// 32 Bit
    	bi.bmiHeader.biWidth		= widthPix;								// Power of two Width
    	bi.bmiHeader.biHeight		= heightPix;							// Make Image Top Up (Positive Y-Axis)
    	bi.bmiHeader.biCompression	= BI_RGB;								// RGB Encoding
    	bi.bmiHeader.biPlanes		= 1;									// 1 Bitplane
     
    	// Creating a bitmap this ways allows us to specify the color depth and have immediate access to the bits
    	hbmpTemp = CreateDIBSection(hdcTemp, &bi, DIB_RGB_COLORS, (void**)&pBits, 0, 0);
     
    	// If creation failed, delete the device context & quit
    	if(!hbmpTemp)														
    	{
    		DeleteDC(hdcTemp);												
    		picture->Release();											// Decrements IPicture Reference Count
    		return FALSE;
    	}
     
     
    	// Else select handle to our temporary DC & temporary bitmap
    	SelectObject(hdcTemp, hbmpTemp);									
     
    	// Render The IPicture On To The Bitmap
    	picture->Render(hdcTemp, 0, 0, widthPix, heightPix, 0, height, width, -height, 0);
     
    	// Convert from BGR to RGB Format and add Alpha value
    	BGRToRGB(pBits, numPix);
     
    	// Set the texture structure's parameters
    	glTexture->Width	= bi.bmiHeader.biWidth;
    	glTexture->Height	= bi.bmiHeader.biHeight;
    	glTexture->Bpp		= bi.bmiHeader.biBitCount;					// Image Color Depth In Bits Per Pixel
    	glTexture->Type		= GL_RGBA;
     
    	// Generate a texture ID
    	glGenTextures(1, &glTexture->TextureID);
     
    	// Generate the texture using the filtering model selected
    	GenerateTexture(glTexture, (BYTE *) pBits);
     
    	// Delete temporary variables
    	DeleteObject(hbmpTemp);												
    	DeleteDC(hdcTemp);													
    	picture->Release();												
    	return TRUE;														
    }

  12. #12
    Membre Expert
    Avatar de shenron666
    Homme Profil pro
    avancé
    Inscrit en
    Avril 2005
    Messages
    2 577
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : avancé

    Informations forums :
    Inscription : Avril 2005
    Messages : 2 577
    Par défaut
    cool et félicitations pour avoir identifié ton problème

    concernant l'utilisation d'une bibliothèque, DevIL est un bon choix bien qu'on puisse la trouver trop lourde, il faut dire qu'elle gère beaucoup de formats et qu'elle permet pas mal de manipulations

    sinon une autre possibilité : SOIL

    juste comme ça, tu ne préfèrerai pas utiliser une bibliothèque de fenêtrage ?
    genre SFML, ça te faciliterai les choses...
    enfin avec l'histoire de l'activex c'est peut-etre hors propos
    Tutoriels OpenGL
    Je ne répondrai à aucune question en MP
    - Si c'est simple tu dis que c'est compliqué et tu le fait
    - Si c'est compliqué tu dis que c'est simple et tu le sous-traite ou le fait faire par un stagiaire.

  13. #13
    Membre chevronné
    Inscrit en
    Février 2008
    Messages
    413
    Détails du profil
    Informations personnelles :
    Âge : 45

    Informations forums :
    Inscription : Février 2008
    Messages : 413
    Par défaut
    OK je vais regarder du côté d'SOIL, c'est vrai que je n'ai sûrement pas besoin de tout ce que DevIL propose et tant qu'à faire j'aimerais ne pas trop allourdir mon application.

    juste comme ça, tu ne préfèrerai pas utiliser une bibliothèque de fenêtrage ?
    genre SFML, ça te faciliterai les choses...
    Crois-moi si je pouvais me passer de tout ce qui est spécifique à microsoft je le ferai avec plaisir.... Le truc c'est que j'ai récupéré les projets tels quels, qui étaient des ActiveX et qui sont intégrés dans d'autres projets sur lesquels je n'ai pas, ou peu, de contrôle...

    Je fais donc avec Bon honnêtement une fois qu'on s'y est mis ca va, là je fais à peu près ce que je veux avec les ActiveX, et j'ai réussi à simplifier le tout un max.

    Edit: je viens de jeter un coup d'oeil au tutorial OpenGL avec SFML....oui ca a l'air sexy, facile, rapide....bouuuuuh ((

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Intel 945G][Stencil Buffer] - Stencil non supporté?
    Par ShevchenKik dans le forum OpenGL
    Réponses: 6
    Dernier message: 26/11/2008, 19h28
  2. [Excel] Message "Interface non supportée"
    Par Hathor dans le forum API, COM et SDKs
    Réponses: 5
    Dernier message: 20/09/2005, 17h09
  3. Interface non supportée
    Par Amara dans le forum Langage
    Réponses: 14
    Dernier message: 16/07/2004, 13h18
  4. [Accents - XML] Problème de codage non supporté !!
    Par Smortex dans le forum Composants VCL
    Réponses: 6
    Dernier message: 24/11/2002, 11h00
  5. [CR8][Delphi6] erreur imprimante non supportée
    Par Sebastien L. dans le forum SDK
    Réponses: 3
    Dernier message: 12/09/2002, 15h42

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo