1.概述

 SDL:窗口系统(基于X11或WayLand协议)

OpenGL(与硬件无关):通过法命令给GPU完成绘制工作.

EGL(与硬件相关):是窗口系统(SDL)和OpenGL媒介

# emacs opengles_for_linux.c
// # gcc gles_linux.c -lm -lSDL2 -lEGL -lGLESv1_CM -o gles_linux
// GLES
#include <GLES2/gl2.h>
#include <GLES2/gl2ext.h>
// EGL
#include <EGL/egl.h>// SDL2
#include <SDL2/SDL.h> // For Events
#include <SDL2/SDL_syswm.h>EGLDisplay  glDisplay;
EGLConfig   glConfig;
EGLContext  glContext;
EGLSurface  glSurface;const char  *gl_vendor, *gl_renderer, *gl_version, *gl_extensions;
SDL_Window *glesWindow = NULL;
float mCubeRotation = 0.0f;float vertices[] = {-1.0f, -1.0f, -1.0f,1.0f, -1.0f, -1.0f,1.0f,  1.0f, -1.0f,-1.0f,  1.0f, -1.0f,-1.0f, -1.0f,  1.0f,1.0f, -1.0f,  1.0f,1.0f,  1.0f,  1.0f,-1.0f,  1.0f,  1.0f
};float colors[] = {0.0f,  1.0f,  0.0f,  1.0f,0.0f,  1.0f,  0.0f,  1.0f,1.0f,  0.5f,  0.0f,  1.0f,1.0f,  0.5f,  0.0f,  1.0f,1.0f,  0.0f,  0.0f,  1.0f,1.0f,  0.0f,  0.0f,  1.0f,0.0f,  0.0f,  1.0f,  1.0f,1.0f,  0.0f,  1.0f,  1.0f
};char indices[] = {0, 4, 5, 0, 5, 1,1, 5, 6, 1, 6, 2,2, 6, 7, 2, 7, 3,3, 7, 4, 3, 4, 0,4, 7, 6, 4, 6, 5,3, 0, 1, 3, 1, 2
};void emulateGLUperspective(GLfloat fovY, GLfloat aspect, GLfloat zNear,GLfloat zFar){GLfloat fW, fH;fH = tan(fovY / 180 * M_PI) * zNear / 2;fW = fH * aspect;glFrustumf(-fW, fW, -fH, fH, zNear, zFar);
}void init_GLES(void){int screenwidth  = 800;int screenheight = 480;int screenbpp    =  16;int fullscreen   =   0;EGLint egl_config_attr[] = {EGL_BUFFER_SIZE,    16,EGL_DEPTH_SIZE,     16,EGL_STENCIL_SIZE,   0,EGL_SURFACE_TYPE,EGL_WINDOW_BIT,EGL_NONE};EGLint numConfigs, majorVersion, minorVersion;glesWindow = SDL_CreateWindow("LOR_GLES_DEMO", 0, 0, screenwidth, screenheight,fullscreen ? (SDL_WINDOW_OPENGL | SDL_WINDOW_FULLSCREEN) : SDL_WINDOW_OPENGL);glDisplay = eglGetDisplay(EGL_DEFAULT_DISPLAY);eglInitialize(glDisplay, &majorVersion, &minorVersion);eglChooseConfig(glDisplay, egl_config_attr, &glConfig, 1, &numConfigs);SDL_SysWMinfo sysInfo;SDL_VERSION(&sysInfo.version); // Set SDL versionSDL_GetWindowWMInfo(glesWindow, &sysInfo);glContext = eglCreateContext(glDisplay, glConfig, EGL_NO_CONTEXT, NULL);glSurface = eglCreateWindowSurface(glDisplay, glConfig,(EGLNativeWindowType)sysInfo.info.x11.window, 0); // X11?eglMakeCurrent(glDisplay, glSurface, glSurface, glContext);eglSwapInterval(glDisplay, 1);glClearColor(0.0f, 0.0f, 0.0f, 0.5f);glClearDepthf(1.0f);glEnable(GL_DEPTH_TEST);glDepthFunc(GL_LEQUAL);glHint(GL_RELATIVE_MOVE_TO_NV, GL_NICEST);glViewport(0, 0, screenwidth, screenheight);glMatrixMode(GL_RECT_NV);glLoadIdentity();emulateGLUperspective(45.0f, (float) screenwidth / (float) screenheight, 0.1f,100.0f);glViewport(0, 0, screenwidth, screenheight);glMatrixMode(GL_NEVER);glLoadIdentity();
}void draw_frame(){glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);glLoadIdentity();glTranslatef(0.0f, 0.0f, -10.0f);glRotatef(mCubeRotation, 1.0f, 1.0f, 1.0f);glFrontFace(GL_CW);glVertexPointer(3, GL_FLOAT, 0, vertices);glColorPointer(4, GL_FLOAT, 0, colors);glEnableClientState(GL_VERTEX_ARRAY_KHR);glEnableClientState(GL_COLOR_EXT);glDrawElements(GL_TRIANGLES, 36, GL_UNSIGNED_BYTE, indices);glDisableClientState(GL_VERTEX_ARRAY_KHR);glDisableClientState(GL_COLOR_EXT);glLoadIdentity();mCubeRotation -= 0.50f;
}int main(void){int loop = 1;SDL_Event event;init_GLES();while (loop) {while (SDL_PollEvent(&event)) {switch (event.type) {case SDL_QUIT: {loop = 0;break;}}}draw_frame();eglSwapBuffers(glDisplay, glSurface);}// CleaningeglDestroySurface(glDisplay, glSurface);eglDestroyContext(glDisplay, glContext);eglTerminate(glDisplay);SDL_DestroyWindow(glesWindow);return 0;
}# gcc opengl_for_linux.c -lm -lSDL2 -lEGL -lGLESv1_CM -o gles_linux

Linux之SDL2+OpenGL+EGL绘制(十六)相关推荐

  1. NeHe OpenGL第四十六课:全屏反走样

    NeHe OpenGL第四十六课:全屏反走样 全屏反走样 当今显卡的强大功能,你几乎什么都不用做,只需要在创建窗口的时候该一个数据.看看吧,驱动程序为你做完了一切.   在图形的绘制中,直线的走样是非 ...

  2. LINUX学习基础篇(二十六)swap分区

    LINUX学习基础篇(二十六)swap分区 swap分区 查看swap分区大小 分配swap分区 格式化swap分区 增加swap分区 swap分区 Linux中的swap分区相当于Windows中的 ...

  3. NeHe OpenGL教程 第二十六课:反射

    转自[翻译]NeHe OpenGL 教程 前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线 ...

  4. 鸟哥的Linux私房菜(基础篇)- 第二十六章、Linux 核心编译与管理

    第二十六章.Linux核心编译与管理 最近升级日期:2009/09/18 我们说的 Linux 其实指的就是核心 (kernel) 而已.这个核心控制你主机的所有硬件并提供系统所有的功能,所以说,他重 ...

  5. 鸟哥的Linux私房菜(基础篇)- 第十六章、例行性工作排程 (crontab)

    第十六章.例行性工作排程 (crontab) 最近升级日期:2009/09/11 学习了基础篇也一阵子了,你会发现到为什么系统常常会主动的进行一些任务?这些任务到底是谁在配置工作的?如果你想要让自己设 ...

  6. Android之WindowManager+OpenGL+EGL绘制(十七)

    1.概述: WindowManager:Android窗口系统 OpenGL(与硬件无关):通过法命令给GPU完成绘制工作. EGL(与硬件相关):是窗口系统(SDL)和OpenGL媒介 framew ...

  7. Linux进程调度策略的发展和演变--Linux进程的管理与调度(十六)

    日期 内核版本 架构 作者 GitHub CSDN 2016-06-14 Linux-4.6 X86 & arm gatieme LinuxDeviceDrivers Linux进程管理与调度 ...

  8. 嵌入式Linux系统编程学习之二十六多线程概述

    文章目录 一.多线程概述 二.线程分类 三.线程创建的Linux实现 一.多线程概述   进程是系统中程序执行和资源分配的基本单位.每个进程有自己的数据段.代码段和堆栈段,这就造成进程在进行切换等操作 ...

  9. 嵌入式Linux驱动学习之路(二十六)DM9000C网卡驱动程序

    基于DM9000C的原厂代码修改dm9000c的驱动程序. 首先确认内存的基地址 iobase. 确定中断号码. 打开模块的初始化函数定义. 配置内存控制器的相应时序(结合DM9000C.C的手册). ...

最新文章

  1. 「SAP技术」交货单发货过账报错 - Material's product unit must be entered in whole numbers - 之对策
  2. C. Anton and Making Potions 贪心 + 二分
  3. python子图之间的距离_python与图论的桥梁——igraph
  4. 下标要求数组或指针类型_算法一看就懂之「 数组与链表 」
  5. 算法提高 质因数2(java)
  6. Android Studio自动排版的两种方法
  7. 【LeetCode】【HOT】49. 字母异位词分组(递归)
  8. react-native 改变webview中字体颜色方式
  9. 国产441b电子计算机,国产441B晶体管计算机文档(讲义)
  10. mysql解释命令,MySQL中EXPLAIN解释命令
  11. pthread_detach()与pthread_join的区别?
  12. 制作python模块安装包[转载自刘天斯]
  13. 新手学c还是java_80x86汇编小站,新手学c还是java
  14. Excel科学计数法转换成文本完整显示
  15. [已解决]Could not create connection to database server.错误的解决方法
  16. 2022-2027年中国股权众筹行业市场调研及未来发展趋势预测报告
  17. Vulkan简介(2)
  18. Spring task corn表达式
  19. hdu2955(变形的01背包)
  20. Win10+Debian11双系统的配置小记

热门文章

  1. 吴恩达机器学习笔记-非监督学习
  2. Asp.net报错汇总:回发或回调参数无效
  3. Redis应用实践:小红书海量Redis存储之道
  4. .NET 4.5 HttpClient 中使用Cookie
  5. 《R in Action》读书笔记(3) 数据变换
  6. 【Android LibGDX游戏引擎开发教程】第06期:图形图像的绘制(下)图片整合工具的使用...
  7. Android事件传递机制【Touch事件】
  8. 在C#中调用Java代码
  9. spring核心知识点分析
  10. Apache Solr Java 企业级搜索引擎