Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Dudas con Opengl 3.x

Iniciado por kokorico, 29 de Enero de 2010, 12:06:10 AM

« anterior - próximo »

kokorico

Hola a todos,
me estoy leyendo un libro de opengl donde hablan del OpenGL 3.x. Lo que viene a decir el libro es que el inmediate mode, esta deprecated. Ok hasta aqui. El caso es que creo el contexto tal como dice el libro, y parece que va bien y dibuja bien, pero no hay ni rastro de mensajes en el compilador que adviertan que las funciones estan deprecated.

No deberia lanzarme algun warning el compilador?

Gracias

tamat

no estaría mal, pero no, opengl es así, rara vez te informa de si haces algo mal.
Por un stratos menos tenso

kokorico


Yotes

Por curiosidad... ¿que libro estas leyendo?? es la úlitma version de OpenGl no?
Yotes!

kokorico

Estoy leyendo este http://www.amazon.com/exec/obidos/ASIN/159863528X/ref=nosim/gamedev

Es la segunda edicion y la verdad es que ya empiezan fuertes por que te dicen que el modo inmediato casi no lo enseñan y desde el primer momento ya empiezan con VBOs. Estoy avanzando poco a poco.

Prompt

Como debe ser, al *** el programable pipeline.

No da warnings porque eso lo debe dar en las cabeceras, así que si la cabecera de GLEW no te lo dice. La del VC++ menos ya que solo soporta OGL 1.1 de forma oficial. Aunque te voy a decir una cosa, si tu tarjeta tuviera soporte de OGL 3.2 y tu usaras OGL 3.2 quizás al usar funcionalidad del fixed pipeline te debería decir QUE NO EXISTE x o y función.

No obstante, OGL es "progresivo" entre versiones, por esto no te dice nada, estoy seguro de que para asegurarte de que usas solo OGL 3.2 deberias meter una MACRO en el proyecto. Seguro que cuando compiles, al tener esa MACRO te dará error de que no existen ya funciones o están DEPRECATED.

Miratelo. No se que MACRO podría ser... pero seguramente la cabecera de GLEW tendrá algunas notas.

Saludos.

kokorico

#6
Pues no he encontrado nada de eso. Si que existe una funcion de comprobacion de version, pero despues no informa de nada sobre el fixed pipeline. Me lo tengo que mirar mas a fondo, pero de momento ni una linea.

Yo no creo que borren nada para poder dar retrocompatibilidad. Simplemente se les iran acumulando bugs por que ya no estaran soportadas, pero no creo que se lien a borrarlas. Creo que la funcion de la que  hablas es cuando creas el render context, que el win32 ha campiado y ahora tienen una especial para OpenGL 3.x., pero no dice nada sobre deprecated.

Hoy me mirare las cabeceras de GLEW a ver si puedo encontrar algunas notas.
Esto es lo que he encotrado en una presentacion de Khronos
Citar
Deprecation mechanism

Step 1 Core feature
-
In core, fully supported. Willbe in the next API version
Step 2 Core (Deprecated feature)
-
In core, marked as deprecated
-
Maybe fully or partly removed in a later version
-
New features need not define interactions with deprecated ones

Step 3 ARB approved Extension
-
Removedfrom core -> an ARB extension (no suffix)
-
Extension spec identifies the removed functionality
-
Vendors may support the extension if markets require it

Step 4 Removed from ARB extension list
- Could be an EXT or vendor extension, if vendor markets still require it (still no suffixes required)
Y con un comentario aparte:
Citar
Deprecation is a four step process. First, a feature is in the core. Next, it is still in the core but clearly marked deprecated in the specification. Next, the ARB will remove it from the core specification and move it into an ARB extension. As you know, extensions are optional to implement by hardware vendors, the core specification is not optional. As a last step the ARB can decide to demote the feature even further, and then it becomes up to a hardware vendor to decide to support the feature as an extension, or not.

La presentacion completa aqui:
http://developer.download.nvidia.com/presentations/2009/GDC/OpenGL3_Introduction_GDC_2009.pdf

Prompt

Si, en el Core 2 toca marcar deprecated no borrarlas. Es extraño que no te avise. No obstante quizás las cabeceras oficiales de nVidia lo mismo te lo indicar y en GLEW no.

Ni idea... pero si que es cierto que habría que tenerlo en cuenta no programar con esas funciones ya.

Aqui veo que están creando una cabecera para OGL 3.x

http://www.opengl.org/registry/
http://www.opengl.org/registry/api/gl3.h
Dice: This is a draft release of gl3.h, a header for use with OpenGL 3.1 and OpenGL 3.2 core profile implementations.

Bueno más abajo dice que borran hasta el 3.1, pero no veo nada de deprecated.

http://www.opengl.org/documentation/specs/
He leido un poco el doc: OpenGL 3.2 Compatibility Profile Specification (pdf revised 2009/12/07) y dice que la funcionalidad que hubiera deprecated en la versión anterior se ha borrado. Pero claro... en teoría en el Core 2 no se borra nada ...


Prompt

http://developer.nvidia.com/object/opengl_3_driver.html

Citar2) I hear about deprecation and removing functionality from OpenGL. What is going on?
Together with OpenGL 3.0, the OpenGL ARB introduced a deprecation mechanism. Deprecation means that a feature is marked for removal from a future version of the OpenGL spec. It is not actually removed yet from OpenGL 3.0, but this means that future versions of OpenGL will likely remove some features. Several features are marked as deprecated in the OpenGL 3.0 specification (but none are removed).

The OpenGL 3.1 specification removed those features that were marked as deprecated in OpenGL 3.0.  However, the OpenGL ARB has recognized that there is a need to provide the new functionality that OpenGL 3.1 brings, and still support the removed functionality. To support that market need, the ARB_compatibility extension has been created. This single extension encapsulates all the removed functionality, and re-introduces that back into core OpenGL 3.1. The entry points and tokens in this extension have not changed. No "ARB" suffix has been attached, for example. Implementation of the ARB_compatibility extension is optional. Some OpenGL vendors might chose not to implement it. NVIDIA does support this extension across all its OpenGL 3.0/3.1/3.2 capable offerings. This means that if the ARB_compatibility extension name is present in the OpenGL extension string, that the OpenGL implementation supports a fully backwards compatible OpenGL 3.1.

For OpenGL 3.2, the OpenGL ARB has introduced two profiles. The "Core" profile and the "Compatibility" profile. A profile is a well defined subset of the OpenGL specification. The "Core" profile builds on top of OpenGL 3.1 (without ARB_compatibility). The Core profile does not support any deprecated features. The Compatibility profile builds on top of OpenGL 3.1 including ARB_compatibility. The Compatibility profile has full support for all features, including the deprecated ones.

NVIDIA recommends that developers always create a Compatibility profile context when running on an OpenGL 3.2 or later platform, to ensure full backwards compatibility of existing OpenGL code.

The OpenGL ARB provides two OpenGL 3.2 specifications, one each for the Core and Compatibility profiles. For the OpenGL Shading Language version 1.50, the OpenGL ARB provides only one document, with the Compatibility profile functionality integrated and clearly marked. These three specification documents can be downloaded from http://www.opengl.org/registry

Otra cosa, no puedo decir.

tamat

gracias por la info prompt, nunca me entero de qué se cuece en opengl 3.x
Por un stratos menos tenso

kokorico

#10
Preguntando por gamedev me dijeron esto:
Mi pregunta:
CitarHi,

I'm new in opengl 3.x and I'm reading that all fixed pipeline has been deprecated. I've compiled old opengl code but creating a new render context (calling GL version 3.x) and no message about deprecation appears in the compiler. Is there a way to instruct the compiler to output a warning message when I do use deprecated functionality?

Las respuestas:
CitarNot really, but you can download a gl3-only header.

Alternatively, you can request a "forward-compatible" (3.1) or "core" (3.2) profile, which will raise an error if you call any deprecated methods. Unfortunately, this is runtime-only protection.
Citar
But does gl3 only header be attached to a determined version? Or you select the version as you request the render context?

And, about the second method, I do understand that you are talking about the use of wglCreateContextAttribsARB funtion as explained in http://www.opengl.org/registry/specs/ARB/wgl_create_context.txt , aren't you?
Citar
gl3.h is for 3.0 and up. This is for your compiler.

It is your responsibility to check if the user`s system supports GL 3.0 or 3.1 or 3.2 while your exe is running on his machine.

Osea, por lo que entiendo es que podemos crear un render context para GL 3.1 o 3.2 e incluir la cabecera GL3.h. Esto haria que si usamos funciones deprecated el programa falle.  Por otro lado podríamos pedir un  "forward-compatible" (3.1) or "core" (3.2) profile. Si miramos el texto de http://www.opengl.org/registry/specs/ARB/wgl_create_context.txt vemos la seccion de los parametros que podemos dar para pedir un render context:
New Procedures and Functions

    HGLRC wglCreateContextAttribsARB(HDC hDC, HGLRC hShareContext,
     const int *attribList)

New Tokens

    Accepted as an attribute name in <*attribList>:

WGL_CONTEXT_MAJOR_VERSION_ARB 0x2091
WGL_CONTEXT_MINOR_VERSION_ARB 0x2092
WGL_CONTEXT_LAYER_PLANE_ARB 0x2093
WGL_CONTEXT_FLAGS_ARB 0x2094
WGL_CONTEXT_PROFILE_MASK_ARB 0x9126

    Accepted as bits in the attribute value for WGL_CONTEXT_FLAGS in
    <*attribList>:

WGL_CONTEXT_DEBUG_BIT_ARB 0x0001
WGL_CONTEXT_FORWARD_COMPATIBLE_BIT_ARB 0x0002

    Accepted as bits in the attribute value for
    WGL_CONTEXT_PROFILE_MASK_ARB in <*attribList>:

WGL_CONTEXT_CORE_PROFILE_BIT_ARB 0x00000001
WGL_CONTEXT_COMPATIBILITY_PROFILE_BIT_ARB 0x00000002

Ahi tenemos la manera de crear contextos que limiten la version compatible por debajo de GL

De todas maneras tengo muy claro que sea aconsejable porque puedes tener sorpresas con las librerias de terceros que puedan usar features de GL, aunque para hacer pruebas de compatibilidad si que parece muy util.

En cambio para forzar un warning todavia no he descubierto casi nada.






Stratos es un servicio gratuito, cuyos costes se cubren en parte con la publicidad.
Por favor, desactiva el bloqueador de anuncios en esta web para ayudar a que siga adelante.
Muchísimas gracias.