从零开始的跨平台渲染引擎(一)——OpenGL基础环境搭建

编程入门 行业动态 更新时间:2024-10-12 01:28:35

<a href=https://www.elefans.com/category/jswz/34/1769682.html style=从零开始的跨平台渲染引擎(一)——OpenGL基础环境搭建"/>

从零开始的跨平台渲染引擎(一)——OpenGL基础环境搭建

前言

在前文中,我主要分析了渲染引擎的整体架构。本文的主要内容是对OpenGL基础环境的搭建,主要涉及架构图中的Container、Graphic Wrapper和Platform层。

这里也放上代码仓的链接:。代码也是从零开始搭建,会逐步的完善功能。

一、OpenGL环境介绍

OpenGL是一些操作GPU的API集合。但是OpenGL并没有提供操作平台本地窗口的API。所以需要另外一套可以起到本地窗口和OpenGL之间桥梁作用的工具。OpenGL的维护组织Kronos也提供了一套本地窗口接口EGL,而苹果公司也为iOS系统提供了一套EAGL框架。

下面就对这两个工具、框架进行相关API介绍,以及如何在工程中应用,可能面临的问题。

二、OpenGL环境搭建基本流程

Android EGL 环境

如果开发过Android图形相关应用的开发,应该会了解过GLSurfaceViewGLSurfaceView已经为我们初始化好了OpenGL环境,我们只需要使用GL10里的相关API实现OpenGL的调用。

但是,这些API都是Android的Java层接口。如果考虑到跨平台特性,就需要使用OpenGL的C++接口了。而NDK提供了EGL工具。在上篇文章中也提到了,Android平台的容器需要使用TextureViewSurfaceView,这两个控件中又可以产生或持有android.View.Surface。而这个Surface则可以通过JNI传递到C++层,用于创建本地窗口。

下面对EGL环境搭建和销毁进行详细介绍。

初始化

  1. 获取并初始化环境
EGLDisplay eglGetDisplay(EGLNativeDisplayType display_id);EGLBoolean eglInitialize(EGLDisplay dpy, EGLint *major, EGLint *minor);

这两个API用于获取系统屏幕资源,并与其进行连接。设备有可能会有多个屏幕,eglGetDisplay方法的参数就是用于选择屏幕。通常情况下,在手机上我们使用EGL_DEFAULT_DISPLAY来获取默认主屏幕。

  1. 配置选择
EGLBoolean eglChooseConfig(EGLDisplay dpy, const EGLint *attrib_list, EGLConfig *configs, EGLint config_size, EGLint *num_config);

这个方法返回一些列满足给定属性的配置。举个栗子:

// Example
const EGLint config_attributes[] = {EGL_RENDERABLE_TYPE, EGL_OPENGL_ES2_BIT,EGL_SURFACE_TYPE,    EGL_WINDOW_BIT,EGL_RED_SIZE,        8,EGL_GREEN_SIZE,      8,EGL_BLUE_SIZE,       8,EGL_ALPHA_SIZE,      8,EGL_DEPTH_SIZE,      24,EGL_STENCIL_SIZE,    

更多推荐

从零开始的跨平台渲染引擎(一)——OpenGL基础环境搭建

本文发布于:2024-02-11 00:43:59,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1678218.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:从零开始   环境   引擎   基础   平台

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!