Me gustaría desarrollar aplicaciones OpenGL ES 2.0 en mi máquina Ubuntu. No pude encontrar bibliotecas/emuladores que admitan GLES 2.0 todavía. ¿Alguna sugerencia?¿Cómo desarrollar aplicaciones OpenGL ES (GLES) 2.0 en Linux?
Respuesta
Puede usar POWERVR SDK para emular OpenGL en su PC. Puede descargar el SDK here. El archivo proporciona los pasos necesarios para instalar las bibliotecas de emulación como un archivo de documentación e incluye tutoriales y aplicaciones de demostración con códigos fuente.
desarrollarse hasta el OpenGL 2.0 standard, y de no utilizar el modo inmediato o el modo de función fija. Esencialmente, su programa cumplirá con ES 2.0.
Esta es mi peor solución de caso. Lamentablemente, no tengo la experiencia suficiente para saber cuándo estoy ingresando al territorio (no es) gl. Por eso estoy buscando límites difíciles. –
Solo puedo desanimarme con esta solución. Mi consejo es crear al menos un contexto de openglES (glfw u otras herramientas pueden ayudarlo) o puede incluir un encabezado de Opengl ES que no define funciones que no se utilizan en absoluto. – Arne
Mesa supports it. Si desea restringirse a OpenGL ES solo, deberá compilarlo en un directorio aparte y luego agregar los directorios apropiados de inclusión y biblioteca.
puede generar un encabezado que tiene solo aquellas funciones que realmente necesita. Y con glfw puede crear un contexto abierto. Por lo tanto, no puede utilizar accidentalmente funciones que no desea usar, ya que no se definirán de esta manera. Encontré esto que podría ayudarte aquí.
GLFW, Mesa, Ubuntu 16.04 AMD64
Esto no era fácil de instalar en Ubuntu 14.04, pero ahora simplemente funciona.
sudo apt-get install libglfw3-dev libgles2-mesa-dev
gcc glfw_triangle.c -lGLESv2 -lglfw
Salida:
Fuente:
#include <stdio.h>
#include <stdlib.h>
#define GLFW_INCLUDE_ES2
#include <GLFW/glfw3.h>
static const GLuint WIDTH = 800;
static const GLuint HEIGHT = 600;
static const GLchar* vertex_shader_source =
"#version 100\n"
"attribute vec3 position;\n"
"void main() {\n"
" gl_Position = vec4(position, 1.0);\n"
"}\n";
static const GLchar* fragment_shader_source =
"#version 100\n"
"void main() {\n"
" gl_FragColor = vec4(1.0, 0.0, 0.0, 1.0);\n"
"}\n";
static const GLfloat vertices[] = {
0.0f, 0.5f, 0.0f,
0.5f, -0.5f, 0.0f,
-0.5f, -0.5f, 0.0f,
};
GLint common_get_shader_program(const char *vertex_shader_source, const char *fragment_shader_source) {
enum Consts {INFOLOG_LEN = 512};
GLchar infoLog[INFOLOG_LEN];
GLint fragment_shader;
GLint shader_program;
GLint success;
GLint vertex_shader;
/* Vertex shader */
vertex_shader = glCreateShader(GL_VERTEX_SHADER);
glShaderSource(vertex_shader, 1, &vertex_shader_source, NULL);
glCompileShader(vertex_shader);
glGetShaderiv(vertex_shader, GL_COMPILE_STATUS, &success);
if (!success) {
glGetShaderInfoLog(vertex_shader, INFOLOG_LEN, NULL, infoLog);
printf("ERROR::SHADER::VERTEX::COMPILATION_FAILED\n%s\n", infoLog);
}
/* Fragment shader */
fragment_shader = glCreateShader(GL_FRAGMENT_SHADER);
glShaderSource(fragment_shader, 1, &fragment_shader_source, NULL);
glCompileShader(fragment_shader);
glGetShaderiv(fragment_shader, GL_COMPILE_STATUS, &success);
if (!success) {
glGetShaderInfoLog(fragment_shader, INFOLOG_LEN, NULL, infoLog);
printf("ERROR::SHADER::FRAGMENT::COMPILATION_FAILED\n%s\n", infoLog);
}
/* Link shaders */
shader_program = glCreateProgram();
glAttachShader(shader_program, vertex_shader);
glAttachShader(shader_program, fragment_shader);
glLinkProgram(shader_program);
glGetProgramiv(shader_program, GL_LINK_STATUS, &success);
if (!success) {
glGetProgramInfoLog(shader_program, INFOLOG_LEN, NULL, infoLog);
printf("ERROR::SHADER::PROGRAM::LINKING_FAILED\n%s\n", infoLog);
}
glDeleteShader(vertex_shader);
glDeleteShader(fragment_shader);
return shader_program;
}
int main(void) {
GLuint shader_program, vbo;
GLint pos;
GLFWwindow* window;
glfwInit();
glfwWindowHint(GLFW_CLIENT_API, GLFW_OPENGL_ES_API);
glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 2);
glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 0);
window = glfwCreateWindow(WIDTH, HEIGHT, __FILE__, NULL, NULL);
glfwMakeContextCurrent(window);
printf("GL_VERSION : %s\n", glGetString(GL_VERSION));
printf("GL_RENDERER : %s\n", glGetString(GL_RENDERER));
shader_program = common_get_shader_program(vertex_shader_source, fragment_shader_source);
pos = glGetAttribLocation(shader_program, "position");
glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
glViewport(0, 0, WIDTH, HEIGHT);
glGenBuffers(1, &vbo);
glBindBuffer(GL_ARRAY_BUFFER, vbo);
glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW);
glVertexAttribPointer(pos, 3, GL_FLOAT, GL_FALSE, 0, (GLvoid*)0);
glEnableVertexAttribArray(pos);
glBindBuffer(GL_ARRAY_BUFFER, 0);
while (!glfwWindowShouldClose(window)) {
glfwPollEvents();
glClear(GL_COLOR_BUFFER_BIT);
glUseProgram(shader_program);
glDrawArrays(GL_TRIANGLES, 0, 3);
glfwSwapBuffers(window);
}
glDeleteBuffers(1, &vbo);
glfwTerminate();
return EXIT_SUCCESS;
}
Las líneas principales línea de código son:
#define GLFW_INCLUDE_ES2
#include <GLFW/glfw3.h>
GLFW_INCLUDE_ES2
es d ocumented en: http://www.glfw.org/docs/latest/build_guide.html#build_macros y un rápido vistazo a la fuente muestra que se envía a GLES:
#elif defined(GLFW_INCLUDE_ES2)
#include <GLES2/gl2.h>
#if defined(GLFW_INCLUDE_GLEXT)
#include <GLES2/gl2ext.h>
#endif
Esta fuente parece estar escrito en el subconjunto común de GLES y OpenGL (como gran parte de GLES), y también compila con -lGL
si eliminamos el #define GLFW_INCLUDE_ES2
.
Si añadimos cosas que no están en GLES como la prestación inmediata glBegin
, de enlace no como se esperaba.
Consulte también: https://askubuntu.com/questions/244133/how-do-i-get-egl-and-opengles-libraries-for-ubuntu-running-on-virtualbox
Créditos: genpfult hizo que el código mucho más correcto.
ARM Mali OpenGL ES SDK
- descarga desde: http://malideveloper.arm.com/resources/sdks/opengl-es-sdk-for-linux/
- abrir la Documentación HTML en un navegador
- siguen la "Guía de inicio rápido", es simple
Contiene varios ejemplos interesantes de código abierto + texto repetitivo del sistema de ventanas (X11 + EGL).
El sistema de compilación admite la compilación cruzada fácil para los SoCs ARM/Mali, pero aún no lo he probado.
El componente clave incluido parece ser el "Emulador de OpenGL ES" http://malideveloper.arm.com/resources/tools/opengl-es-emulator/ que "asigna las llamadas de la API de OpenGL ES 3.2 a la API de OpenGL". Pero eso no se envía con la fuente, solo precompilado.
Utiliza un EULA empresarial personalizado que parece ser permisivo, pero sí, consulte a su abogado.
Probado en SDK v2.4.4.
'#version 330 core' probablemente obstruirá las implementaciones que no sean de Mesa ES 2.0. Probablemente debería retroceder a '#version 100' y' attrib'/'varying' en lugar de' in'/'out' /' layout'. No crea que los VAO están en ES 2.0 no extendido tampoco. – genpfault
@genpfault si puede, publique la versión que cumple con GLES 2 en un Gist o simplemente edítela o vincule con un ejemplo correcto, y la probaré nuevamente en mi Ubuntu y la actualizaré. Obviamente todavía no sé mucho sobre los shaders, pero necesitaba un mundo de hola de GLES para las pruebas de integración de plataformas. –
Editado, funciona en mi computadora portátil Debian 'testing' con gráficos Skylake y Mesa 11.2.2. – genpfault
- 1. ¿Es posible desarrollar aplicaciones de DirectX en Linux?
- 2. Android OpenGL ES 2.0 emulador
- 3. Cómo lograr glOrthof en OpenGL ES 2.0
- 4. Desarrollar para OpenGL ES en el escritorio
- 5. Mejores prácticas de OpenGL ES 2.0 Shader
- 6. Diferencia entre OpenGL ES 2.0 y OpenGL 4
- 7. OpenGL u OpenGL ES
- 8. ¿CÓMO crear OpenGL ES 2.0 SkyBox?
- 9. Transición de OpenGL ES 1.1 a OpenGL ES 2.0
- 10. Elija OpenGL ES 1.1 u OpenGL ES 2.0?
- 11. Trazado de recorte en OpenGL ES 2.0
- 12. EGL vs GLES 2.0 en Android (por ejemplo, Java)
- 13. Puntos texturizados en OpenGL ES 2.0?
- 14. Introducción a OpenGL ES 2.0 en Windows
- 15. ¿Qué herramientas usas para desarrollar aplicaciones C++ en Linux?
- 16. ¿Cómo dibujar algo con OpenGL ES en Linux?
- 17. ¿Cómo desarrollar aplicaciones IronPython en Mono?
- 18. iPhone OpenGL ES 2.0 - Pixel Perfect Textures
- 19. PowerVR SGX535 Shader Performance (OpenGL ES 2.0)
- 20. ¿Cómo usar OpenGL ES 2.0 en Android SDK (no NDK)?
- 21. ¿Cómo reemplazo glBegin() y funciones relacionadas en OpenGL ES 2.0?
- 22. Cómo desarrollar aplicaciones de Windows
- 23. OpenGL ES 2.0 equivalente de glOrtho()?
- 24. Android Live Wallpapers con OpenGL ES 2.0?
- 25. OpenGL ES 2.0 posible sin NDK?
- 26. Cuestiones de la cámara OpenGL ES 2.0
- 27. OpenGL ES 2.0 GLKit con fondo transparente
- 28. OpenGL ES 2.0 PNG canal alfa
- 29. Libgdx no usa Opengl ES 2.0
- 30. cuál es la contraparte para gl_TexCoord en OpenGL ES 2.0
Esto requiere un registro. La versión de ARM Mali es una descarga abierta: http://www.malideveloper.com/opengl-es-20-emulator.php – ahcox
@ahcox Sin mencionar que es cca 300kb en comparación con 300mb +, incluye tanto libs ES1 como ES2, y el el alojamiento parece soportar velocidades mayores de 30 kbps. Realmente me encantaría obtener el SDK de POWERVR (supongo que obtendría soporte PVRTC), pero esto es una tontería. Hay que admitir que Imagination Technologies puede tener dificultades solo temporalmente, pero si tú, ahcox, no publicaras esto, realmente me daría por vencido. ¡Deberías haber publicado esto como una respuesta alternativa! :-) –