linux opengl es,在Linux上,如何开发OpenGL ES(GLES)2.0应用程序?
问题描述
我想在我的Ubuntu计算机上开发OpenGL ES 2.0应用程序。我找不到支持GLES 2.0的任何库/仿真器。有什么建议么?
最佳回答
您可以使用POWERVR SDK在PC上模拟Opengl。您可以下载SDK here。该归档文件提供了将仿真库作为文档文件安装的必要步骤,并包括带有源代码的教程和演示应用程序。
次佳回答
GLFW,Mesa,Ubuntu 16.04 AMD64
在Ubuntu 14.04上设置起来并不容易,但是现在可以使用了。
sudo apt-get install libglfw3-dev libgles2-mesa-dev
gcc glfw_triangle.c -lGLESv2 -lglfw
输出:
资源:
#include
#include
#define GLFW_INCLUDE_ES2
#include
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;
}
代码的关键行是:
#define GLFW_INCLUDE_ES2
#include
#elif defined(GLFW_INCLUDE_ES2)
#include
#if defined(GLFW_INCLUDE_GLEXT)
#include
#endif
该源代码似乎是用GLES和OpenGL的通用子集编写的(就像许多GLES一样),并且如果我们删除#define GLFW_INCLUDE_ES2,也可以使用-lGL进行编译。
如果我们添加不在GLES中的内容(例如立即渲染glBegin),则链接会按预期失败。
鸣谢:genpfult使代码更正确。
ARM Mali OpenGL ES SDK
包含几个有趣的开源示例+窗口系统样板(X11 + EGL)。
该构建系统支持针对ARM /Mali SoC的轻松交叉编译,但是我尚未对此进行测试。
其中包括的关键组件似乎是“ OpenGL ES仿真器” http://malideveloper.arm.com/resources/tools/opengl-es-emulator/,它“将OpenGL ES 3.2 API调用映射到OpenGL API”。但这并不附带源代码,而只是预编译的。
使用似乎允许的自定义企业EULA,是的,请咨询您的律师。
已在SDK v2.4.4上测试。
第三种回答
台面supports it。如果只想限制自己使用OpenGL ES,则需要将其构建到一个单独的目录中,然后添加适当的包含目录和库目录。
参考资料
linux opengl es,在Linux上,如何开发OpenGL ES(GLES)2.0应用程序?相关推荐
- linux征途服务端,踏上Spring的征程3-Linux服务器从0开始搭建
一.服务器选型与基本配置 京东云服务器现在有一个月的试用期限,所以我选择了这个试用服务器,其配置如下: 图片.png 系统版本我选择是最新centerOS的7.0版本 图片.png 重置密码,之后重启 ...
- Linux 2 的 Windows 子系统上发布 CUDA
Linux 2 的 Windows 子系统上发布 CUDA 为响应大众需求,微软 宣布 在 2020 年 5 月的 建造 大会上推出了 建造 ( WSL 2 ) – GPU 加速功能.这一特性为许多计 ...
- 适用于Linux 2的Windows子系统上的CUDA
适用于Linux 2的Windows子系统上的CUDA Announcing CUDA on Windows Subsystem for Linux 2 为了响应大众的需求,微软在2020年5月的构建 ...
- Linux上线程开发API概要(线程)
进程与线程 典型的UNIX/Linux进程可以看成只有一个控制线程:一个进程在同一时刻只做一件事情.有了多个控制线程后,在程序设计时可以把进程设计成在同一时刻做不止一件事,每个线程各自处理 ...
- linux上 arm开发环境搭建,详解 LINUX下QT For ARM开发环境搭建过程
LINUX下QT For ARM开发环境搭建过程是本文介绍的内容,不多说,先来看内容.在PC上,我们需要得到两个版本的Qt,分别是:Qt-4.5.2和QtEmbedded-4.5.2-arm.前者包括 ...
- 在linux基础上开发内核,科学院在Linux内核基础上,开发出中文操作系统是()。A.中科LinuxB.熊猫LinuxC.红旗Linux...
科学院在Linux内核基础上,开发出中文操作系统是().A.中科LinuxB.熊猫LinuxC.红旗Linux 更多相关问题 肉芽组织在光镜下主要由什么成份构成?A.炎症细胞及成纤维细胞B.成纤维细胞 ...
- win集成linux开发环境,在 Windows 10 上创建开发环境 | Microsoft Docs
在 Windows 10 上设置开发环境Set up your development environment on Windows 10 07/24/2020 本文内容 本指南将帮助你开始安装和设置 ...
- linux上qt配置opengl,Ubuntu下配置Qt+OpenGL+OpenCV
我的平台:Ubuntu 10.04+Qt+OpenGL+OpenCV OpenGL是Qt自带的,Windows下的版本OpenGL库已经随同Qt的Windows发行版一同安装,Linux版本则没有安装 ...
- 多台es服务器搭建elasticsearch集群,es单机伪集群搭建,在一台服务器上以三个不同的端口模拟三台主机完成es伪集群搭建,windows和Linux操作方法一致
目录 (一)es单机伪集群搭建 一.准备三台elasticsearch服务器(复制三个es目录) 二.修改每台服务器的配置 1.修改es配置文件 2.配置注意 (二)多台服务器es集群搭建: 1 安装 ...
最新文章
- 利用浏览器LocalStorage缓存图片,视频文件
- CSS的未来:游戏的变革Flexbox
- python背景颜色词云图_python中实现词云图
- asp.net怎样解决高并发问题
- linux树莓派网易云音乐,基于树莓派的红外遥控版网易云音乐播放器
- Resin的安全性ip限制
- mysql decode语句_MySQL复制问题的分析
- VVOL和VASA Provider
- python创意实用案例-精心整理!9个 Python 实用案例分享
- 微信公众号网页授权代码优化过程(三)
- Oracle中ORACLE_SID,INSTANCE_NAME,DB_NAME几个名词的区别
- 数据库系统概论第五版第二章答案王珊
- 周莫凡python_机器学习 | 莫烦Python
- opencv遍历像素输出像素值
- java rxtx 64_win7 64为下使用rxtx串口通信
- 可喜可贺,暴雪即将收购第一家工作室Proletariat,魔法吃鸡停运
- jasper 引入字体_MAC下JasperStudio创建及引用字体
- CKEditor5 富文本编辑器安装以及使用
- 计算机美图PS等,电脑软件ps和美图秀秀怎么拼图 不懂操作怎么办?
- 瀑布 敏捷转换_敏捷的错觉(大多数敏捷转换最终实现了什么)
热门文章
- flash调用swf文件服务器,FLASH如何加载(调用)外部SWF文件
- 关于latex报错GPL Ghostscript 9.50的解决办法
- 【BZOJ4808/3175】马/[Tjoi2013]攻击装置 最小割
- 微信小程序-购物商城
- Ubuntu配置Nginx部署Vue SPA项目
- 滑动窗口大小为什么不能是2的n次方大小
- 网络ID,广播地址,掩码位数计算
- P1909 [NOIP2016 普及组] 买铅笔
- jrebel Could not find agent library/Can't load IA 32-bit .dll on a AMD 64-bit platform
- 【已解决】彻底修改Tomcat9 控制台 中文乱码问题