Ir puro OpenGL o GLSL? [cerrado]

11

Me interesé en estudiar programación gráfica, por lo que el punto de entrada obvio era aprender OpenGL. Pero al recopilar información dispersa en foros y sitios, parece que una implementación pura de OpenGL se está desvaneciendo, ya que la mayoría de las cosas anteriores a 3.0 están en desuso y citando una revisión en Amazon, "desde 3.0 todo se trata de los sombreadores". Además, de los libros que he visto, parece que solo el soberbio cubre la versión más reciente, pero solo en parte porque una buena parte del libro enseña funciones obsoletas, y hay libros específicamente para GLSL.

Aquí es donde me encontré con mi primer problema, algunos hardwares no son compatibles con GLSL, incluido el portátil con gráficos integrados Intel que había planeado usar. La función

GLuint vertShader = glCreateShader(GL_VERTEX_SHADER);

causa un error de segmentación y, por lo que parece, mi controlador no admite sombreadores

Entonces mi pregunta es, ¿cuál es la viabilidad de hacer un juego solo en OpenGL? ¿Me faltarán buenas características irremplazables del lenguaje de sombreado? ¿Y qué tipo de hardware (viejos gen i3, i5, i7, viejos VGA) puedo esperar para ejecutar un juego con sombreadores correctamente?

ibrabeicker
fuente
1
GLSL es OpenGL, creo que su pregunta está relacionada con si el hardware que pretende usar es compatible con OpenGL 3, no específicamente compatible con GLSL.
desaceleratedcaviar
@Daniel, entonces, si un hardware / controlador es compatible con OpenGL 3.0, ¿es compatible con GLSL?
ibrabeicker
1
GLSL es parte de la especificación OpenGL 3.0, así que sí, ese es el caso.
deceleratedcaviar
1
Usted dice: "por lo que parece, mi controlador no admite sombreadores". ¿Qué versión de OpenGL estás obteniendo? ¿Estás cargando correctamente todas las funciones de OpenGL disponibles?
Nicol Bolas
1
@Papavoikos: Si devuelve NULL, tienes problemas mucho más grandes que si usar sombreadores. ¿Estás creando tu contexto OpenGL correctamente? Recuerde: no puede llamar a ninguna función GL hasta que tenga un contexto válido creado y actualizado.
Nicol Bolas

Respuestas:

9

El código de sombreador es definitivamente más claro y más fácil de entender que un desorden de glTexEnv, glTexGen y llamadas de matriz de textura, y tiene la ventaja de que puede expresar cualquier operación matemática más o menos arbitraria al usarlo (lo que no puede hacer con el fijo pipeline: lo que llama "OpenGL puro"). El único inconveniente potencial es que necesita escribir una cierta cantidad de infraestructura de soporte en su código antes de que pueda comenzar a usarlos, mientras que con la antigua forma en que puede sumergirse. Llamo a eso un inconveniente "potencial" porque realmente piensa que te hace preparar las cosas y aprender un poco más de antemano: OpenGL tiene la reputación de ser "fácil" y ocasionalmente ves que las personas se dejan engañar por esto y se sumergen sin saber realmente lo que están haciendo primero,

En cuanto al hardware, puede confiar en casi todo lo lanzado en los últimos 5/6/7 años para tener cierto grado de compatibilidad con sombreadores, pero, en el caso de Intels anteriores (algunas de la serie 9xx), no será GLSL, pero en su lugar serán las extensiones GL_ARB_vertex_program y GL_ARB_fragment_program anteriores . Estos usan un lenguaje de sombreador similar al lenguaje ensamblador, pero, tiempo de confesión, personalmente me gusta mucho. En realidad, es bastante fácil de usar, si carece de algunas características más modernas (como la ramificación) y requiere más líneas de código de sombreador para hacer lo mismo. La infraestructura de soporte requerida en su programa principal para estas extensiones es mucho más ligera que para GLSL también.

Sin embargo, eso no quiere decir que los recomendaría sobre GLSL, pero son una opción que está ahí si realmente necesita ejecutarse en esta clase de hardware y es útil tener en cuenta que existen, lo que me lleva al punto final . ¿Está realmente seguro de que realmente necesita ejecutarse en esta clase de hardware (por ejemplo, en el caso de su computadora portátil, es posible que haya descuidado obtener los puntos de entrada)?

Maximus Minimus
fuente
Descuidé por completo el hecho de que Mesa3d todavía está en la especificación opengl 2.1. Lo arreglaré
ibrabeicker
6

También se debe tener en cuenta que ya no hay "OpenGL puro".

OpenGL ES 2.0 abandonó todo lo que no es sombreador, y dado que WebGL se basa en él, también solo funciona con sombreadores. OpenGL 3.0 dejó en desuso todas las funciones fijas y 3.1 lo eliminó (en los perfiles principales. La mayoría de las implementaciones admiten perfiles de compatibilidad, pero MacOSX no lo hace para su implementación 3.2).

Por lo tanto, no sugeriría aprender OpenGL sin sombreador.

Nicol Bolas
fuente
6

Si ha realizado alguna programación en el pasado, será mucho más divertido escribir su propio código de sombreador con GLSL. Originalmente intenté aprender OpenGL de función fija y fue más difícil para mí porque no tenía sentido. Luego intenté aprender GLSL usando el libro naranja y fue mucho más fácil y se hizo más desde entonces. Solo mis 2 centavos.

Definitivamente me gustaría ir a GLSL por el poder de escribir programas para la GPU.

Joey Green
fuente