Mesa mendukungnya. Jika Anda ingin membatasi diri hanya untuk OpenGL ES hanya maka Anda harus membuatnya menjadi direktori terpisah dan kemudian menambahkan direktori include dan library yang sesuai.
Perbarui:
Anda dapat (masih) menggunakan PowerVR SDK dan sekarang mendukung Vulkan juga. Tautan yang diperbarui:
- Laman PowerVR SDK:https://www.imgtec.com/developers/powervr-sdk-tools/powervr-sdk/
- Halaman pengunduhan penginstal:https://www.imgtec.com/developers/powervr-sdk-tools/installers/
- Repo Github:https://github.com/powervr-graphics/Native_SDK
Pada saat jawaban awal saya, PowerVR SDK adalah solusi terlengkap (Mesa memperoleh dukungan penuh OpenGL ES 2.0 dengan rilis 3.1 menurut halaman Wikipedia-nya).
Kini, Mesa dan Mali SDK juga bisa jadi pilihan. Untuk info terperinci tentang itu, silakan lihat jawaban terperinci ini oleh Ciro Santilli 冠状病毒审查六四事件法轮功
Jawaban Asli:
Anda dapat menggunakan POWERVR SDK untuk meniru Opengl es di PC Anda. Anda dapat mengunduh SDK di sini. Arsip menyediakan langkah-langkah yang diperlukan untuk menginstal pustaka emulasi sebagai file dokumentasi dan menyertakan tutorial dan aplikasi demo dengan kode sumber.
GLFW, Mesa, Ubuntu 16.04 AMD64
Ini tidak mudah untuk diatur di Ubuntu 14.04, tetapi sekarang sudah berfungsi.
sudo apt-get install libglfw3-dev libgles2-mesa-dev
gcc glfw_triangle.c -lGLESv2 -lglfw
Keluaran:
glfw_triangle.c
#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;
}
Baris kode kuncinya adalah:
#define GLFW_INCLUDE_ES2
#include <GLFW/glfw3.h>
GLFW_INCLUDE_ES2
didokumentasikan di:http://www.glfw.org/docs/latest/build_guide.html#build_macros dan sekilas melihat sumbernya menunjukkan bahwa itu diteruskan ke GLES:
#elif defined(GLFW_INCLUDE_ES2)
#include <GLES2/gl2.h>
#if defined(GLFW_INCLUDE_GLEXT)
#include <GLES2/gl2ext.h>
#endif
Sumber ini tampaknya ditulis dalam subset umum GLES dan OpenGL (seperti kebanyakan GLES), dan juga dikompilasi dengan -lGL
jika kita menghapus #define GLFW_INCLUDE_ES2
.
Jika kita menambahkan hal-hal yang tidak ada di GLES seperti rendering langsung glBegin
, tautan gagal seperti yang diharapkan.
Lihat juga:https://askubuntu.com/questions/244133/how-do-i-get-egl-and-opengles-libraries-for-ubuntu-running-on-virtualbox
Kredit:genpfult membuat kode lebih tepat.
SDK OpenGL ES ARM Mali
- unduh dari:http://malideveloper.arm.com/resources/sdks/opengl-es-sdk-for-linux/
- buka dokumentasi HTML di browser
- ikuti "Panduan Memulai Cepat", mudah saja
Berisi beberapa contoh open source yang menarik + boilerplate sistem windowing (X11 + EGL).
Sistem build mendukung kompilasi silang yang mudah untuk SoC ARM / Mali, tetapi saya belum mengujinya.
Komponen kunci yang disertakan tampaknya adalah "OpenGL ES Emulator" http://malideveloper.arm.com/resources/tools/opengl-es-emulator/ yang "memetakan panggilan OpenGL ES 3.2 API ke OpenGL API". Tapi itu tidak dikirimkan dengan sumber, hanya dikompilasi sebelumnya.
Menggunakan EULA perusahaan khusus yang tampaknya permisif, tapi ya, tanyakan pada pengacara Anda.
Diuji pada SDK v2.4.4.