
GLSL
hankern
Code World,Cool Life
展开
-
osgEarth的Rex引擎原理分析(五十六)记录20191024
今天是20191024,好久没有更新文章,等忙完此段再来深究!原创 2019-10-24 21:06:42 · 243 阅读 · 0 评论 -
openGL之API学习(八十四)glGetObjectLabel
获取命名空间对象的标签。打标签由函数glObjectLabel执行。void glGetObjectLabel( GLenum identifier, GLuint name, GLsizei bufSize, GLsizei * length, char * label);identifier The namespace ...原创 2019-06-07 08:19:03 · 393 阅读 · 0 评论 -
openGL之API学习(八十一)glsl的双精度double-precision
10年以前的旧显卡基本上是没有双精度的。新显卡使用双精度需要开启GL_ARB_vertex_attrib_64bit 和 GL_ARB_gpu_shader_fp64扩展,并且显卡架构要在SM5以上。就算有些显卡支持双精度类型,但是一些函数还是使用的float,比如exp, exp2, log, log2等。GLSL4.0以后才能访问double-precision类型...原创 2019-06-02 06:38:33 · 2363 阅读 · 0 评论 -
openGL之API学习(七十八)SPIR-V
Standard, Portable Intermediate Representation - V (SPIR-V)OpenGL 4.6的最大变化就是 支持SPIR-V,一种用于GPU通用计算和图形学的中间语言,Khronos开发设计,最初是为OpenCL规范准备的,和下一代图形标准Vulkan差不多同时提出,也在不断发展完善。SPIR-V是一种简单的二元中间语言,用于图形着色和计...原创 2019-05-30 07:29:11 · 3866 阅读 · 0 评论 -
openGL之API学习(八十五)有关opengl扩展extension
opengl扩展是opengl核心所不具备的新的或扩展的功能。一般opengl扩展会有多个硬件厂商支持,只有部分会有特殊的硬件开发厂商支持。哪些扩展有哪些厂商支持,可以查看下面的网站:https://www.khronos.org/opengl/wiki/OpenGL_Extensionhttps://www.khronos.org/registry/OpenGL/index_gl.p...原创 2019-06-15 17:40:36 · 970 阅读 · 0 评论 -
openGL之API学习(八十六)OpenGL、OpenGL ES、OpenGL SC、GLSL、 GLSL ES、GLX
在不同平台和设备运行的图形规范OpenGL桌面级GLSL是OpenGL着色语言,运行于桌面级的GPUOpenGL ES嵌入式、手持设备GLSL ES运行于嵌入式、手持设备的GPUOpenGL SC高可靠度显示系统GLX(OpenGL extension for X)它作为x的扩展,是x协议和X server的一部分,已经包含在X server的代码中了。GLX提供了x wi...原创 2019-06-15 18:11:04 · 886 阅读 · 0 评论 -
openGL之API学习(八十七)有关OpenGL SC
OpenGL SC 1.0 定义了OpenGL ES™ 1.0固定功能图形管线的高安全度子集。OpenGL SC 1.0 在2005年运行,之后在2009年更新到OpenGL SC 1.0.1。OpenGL SC 2.0 是OpenGL ES 2.0的子集,把控基于GLSL的可编程渲染器,以实现更强的图形功能,包括提高性能和降低能耗。OpenGL SC 2.0 去除了OpenGL ES 2.0的全...原创 2019-06-15 18:15:13 · 1081 阅读 · 0 评论 -
openGL之API学习(八十八)有关Khronos Group
Khronos Group是一个行业组织,创建开放标准以实现并行计算、图形、视觉、传感处理和动态媒体在各种平台和设备上的编写和加速。Khronos标准包括 Vulkan™, OpenGL®, OpenGL® ES, WebGL™, OpenCL™, SPIR™, SYCL™, WebCL™, OpenVX™, EGL™, OpenMAX™, OpenVG™, OpenSL ES™, StreamI...原创 2019-06-15 18:17:37 · 1313 阅读 · 0 评论 -
openGL之API学习(八十九)WebGL与opengl es
WebGL是一种3D绘图标准,这种绘图技术标准允许把JavaScript和OpenGL ES 2.0结合在一起,通过增加OpenGL ES 2.0的一个JavaScript绑定,WebGL可以为HTML5 Canvas提供硬件3D加速渲染,这样Web开发人员就可以借助系统显卡来在浏览器里更流畅地展示3D场景和模型了,还能创建复杂的导航和数据视觉化。显然,WebGL技术标准免去了开发网页专用渲染插件...原创 2019-06-15 18:24:49 · 912 阅读 · 0 评论 -
openGL之API学习(八十三)glObjectLabel
给一个命名空间的对象打上标签。命名空间可以是GL_BUFFER, GL_SHADER, GL_PROGRAM, GL_VERTEX_ARRAY, GL_QUERY, GL_PROGRAM_PIPELINE, GL_TRANSFORM_FEEDBACK, GL_SAMPLER, GL_TEXTURE, GL_RENDERBUFFER, GL_FRAMEBUFFER。命名空间中的对象可以是buffer...原创 2019-06-07 08:04:10 · 1112 阅读 · 0 评论 -
openGL之API学习(八十)狭义的游戏引擎的定义
狭义的游戏引擎的定义(wiki)图形渲染粒子系统物理系统骨骼系统角色系统动画系统场景管理可视剔除层次细节界面模块脚本接口纹理模型资源管理音频功能网络模块AI模块视频功能更新功能多核支持外围工具链...原创 2019-05-30 23:00:38 · 200 阅读 · 0 评论 -
openGL之API学习(七十五)opengl扩展GL_EXT_gpu_shader4
static const char* pFS = " \n\#version 410 \n\ ...原创 2019-05-22 06:50:11 · 1876 阅读 · 0 评论 -
openGL之API学习(六十二)glBufferData
往gpu缓冲区写入数据void glBufferData( GLenum target, GLsizeiptr size, const GLvoid * data, GLenum usage);target Specifies the target to which the buffer object is bound for g...原创 2019-05-17 21:32:53 · 3559 阅读 · 0 评论 -
openGL之API学习(六十三)GL_RASTERIZER_DISCARD
glEnable(GL_RASTERIZER_DISCARD);使用GL_RASTERIZER_DISCARD标志作为参数调用glEnable()函数,告诉渲染管线在transform feedback可选阶段之后和到达光栅器前抛弃所有的图元。glDisable(GL_RASTERIZER_DISCARD);...原创 2019-05-18 07:23:03 · 1019 阅读 · 1 评论 -
openGL之API学习(六十四)glBeginTransformFeedback
开始变换反馈操作。void glBeginTransformFeedback( GLenum primitiveMode);primitiveMode Specify the output type of the primitives that will be recorded into the buffer objects that are bound for tran...原创 2019-05-18 08:15:13 · 626 阅读 · 0 评论 -
openGL之API学习(六十五)glDrawTransformFeedback
从变换反馈Transform Feedback的缓冲区中绘制图元。与glDrawArrays不同的是不需要指定顶点的数量。void glDrawTransformFeedback( GLenum mode, GLuint id);mode Specifies what kind of primitives to render. Symbolic constan...原创 2019-05-18 08:23:47 · 907 阅读 · 0 评论 -
openGL之API学习(六十六)EmitVertex EndPrimitive
EmitVertex表示输出一个顶点,而EndPrimitive表示结束一个图元的输出,这是一对命令。只有几何着色器才有的命令。几何着色器的图元通过两个特殊的内置函数生成的,即EmitVertex()和EndPrimitive() ,每个着色器请求都必须调用EmitVertex(),以及必须必要的时候使用EndPrimitive()来产生图元,如果没有调用这些函数,那么就不会输出几何体,也就是...原创 2019-05-18 16:17:01 · 2092 阅读 · 0 评论 -
openGL之API学习(六十七)glTexParameter glTextureParameter
设置纹理对象的参数,这两个函数其实是一个功能。void glTexParameterf( GLenum target, GLenum pname, GLfloat param);target Specifies the target to which the texture is bound for glTexParameter functions...原创 2019-05-18 17:08:26 · 1022 阅读 · 0 评论 -
openGL之API学习(七十九)HDR高动态范围图像
高动态范围图像(High-Dynamic Range,简称HDR),相比普通的图像,可以提供更多的动态范围和图像细节,根据不同的曝光时间的LDR(Low-Dynamic Range,低动态范围图像),并利用每个曝光时间相对应最佳细节的LDR图像来合成最终HDR图像。它能够更好的反映出真实环境中的视觉效果。(上方为压缩后的HDR图像,下方为直接用相机拍摄的图像)...原创 2019-05-30 22:57:37 · 565 阅读 · 0 评论 -
openGL之API学习(九十)GL_ARB_gpu_shader5
针对OpenGL 3.2 和 GLSL 1.50 提供的扩展。具体可看:https://www.khronos.org/registry/OpenGL/extensions/ARB/ARB_gpu_shader5.txt原创 2019-06-15 20:39:25 · 972 阅读 · 0 评论 -
openGL之API学习(九十二)GLM
OpenGL Mathematics (GLM) 是一个基于GLSL的C++数学函数库。小例子:#include <glm/glm.hpp>int foo(){ glm::vec4 Position = glm::vec4( glm::vec3( 0.0 ), 1.0 ); glm::mat4 Model = glm::mat4( 1.0 ); ...原创 2019-06-16 07:02:53 · 1066 阅读 · 0 评论 -
openGL之API学习(一零零)glProgramParameter
给着色器程序传递参数void glProgramParameteri( GLuint program, GLenum pname, GLint value);program Specifies the name of a program object whose parameter to modify.指定着色器程序标识符pname...原创 2019-07-04 22:31:18 · 490 阅读 · 0 评论 -
openGL之API学习(一一一)glUniform
设置当前着色器程序中的一致变量的值。具体包含一系列函数:void glUniform1f( GLint location, GLfloat v0);void glUniform2f( GLint location, GLfloat v0, GLfloat v1);void glUniform3f( GLint locati...原创 2019-07-14 16:09:52 · 876 阅读 · 0 评论 -
openGL之API学习(一零一)glGetAttachedShaders
获取着色器程序(program)中所有的着色器对象(shader)void glGetAttachedShaders( GLuint program, GLsizei maxCount, GLsizei *count, GLuint *shaders);program Specifies the program object to be...原创 2019-07-05 07:28:58 · 369 阅读 · 0 评论 -
openGL之API学习(一零九)FFP
固定功能流水线Fixed-Function Pipeline (FFP)原创 2019-07-11 06:20:21 · 214 阅读 · 0 评论 -
openGL之API学习(九十七)glGetProgramiv
获取着色器程序的属性值void glGetProgramiv( GLuint program, GLenum pname, GLint *params);program Specifies the program object to be queried.指定着色器程序对象pname Specifies the object par...原创 2019-06-30 23:30:11 · 1078 阅读 · 0 评论 -
openGL之API学习(九十九)glValidateProgram
检查着色器可执行程序能够在当前OpenGL状态下执行,检查是否通过的结果需要glGetProgram来获得。检查出错信息会存放在日志信息中,该信息需要通过glGetProgramINfoLog来获得,这些信息会提示程序为什么不高效、不优化、不能执行等。void glValidateProgram( GLuint program);program Specifies the...原创 2019-07-01 06:51:44 · 552 阅读 · 0 评论 -
openGL之API学习(一一三)glut freeglut glew glfw的关系
glutgult:OpenGL工具库 OpenGL Utility Toolkit。 glut是基本的窗口界面,是独立于gl和glu的,如果不喜欢用glut可使用MFC和Win32窗口等代替。但是glut是跨平台的,这就保证了我们编出的程序具有跨平台性,而使用MFC或Win32只能在windows操作系统上使用。主要包括窗口操作函数,窗口初始化、窗口大小、窗口位置等函数;回调函数:响应刷新消息...原创 2019-08-03 18:23:24 · 924 阅读 · 0 评论 -
openGL之API学习(一一二)纹理坐标和物体坐标
纹理坐标用strq表示,物体坐标用xyzw表示原创 2019-07-27 07:06:43 · 606 阅读 · 0 评论 -
openGL之API学习(一一零)glProgramUniform
设置着色器程序中的一致变量的值。具体包含一系列函数:void glProgramUniform1f( GLuint program, GLint location, GLfloat v0);void glProgramUniform2f( GLuint program, GLint location, GLfloat v0,...原创 2019-07-14 16:04:33 · 1080 阅读 · 0 评论 -
openGL之API学习(九十六)glGetProgramBinary
生成着色器程序已经编译、链接过的二进制数据。void glGetProgramBinary( GLuint program, GLsizei bufSize, GLsizei *length, GLenum *binaryFormat, void *binary);program Specifies the name of ...原创 2019-06-29 06:22:54 · 972 阅读 · 0 评论 -
openGL之API学习(九十三)OpenGL中EXT,ARB扩展
由于OpenGL的标准更新不是很频繁,因此,当某种技术应用流行起来时,显卡厂商为了支持该技术,会使用自己的扩展来实现该功能。但是不同厂商如果有不同的实现,那么程序编写将会异常繁琐。因此多个厂商共同协商使用一致的扩展,这就是EXT扩展。 如果这个扩展不仅多厂商协商,而且得到OpenGL体系结构审核委员会(即ARB)的确认,那么该扩展便成为ARB扩展。最后如果标准制定者认为该功能有必要添加到新版本的标...原创 2019-06-17 21:58:44 · 791 阅读 · 0 评论 -
openGL之API学习(九十四)几何着色器的几个参数设置含义
//设定输入几何图元的类型,比如GL_TRIANGLESglProgramParameteriEXT( program, GL_GEOMETRY_INPUT_TYPE_EXT, inputGeometryType);//设定输出几何图元的类型,比如GL_TRIANGLE_STRIPglProgramParameteriEXT( program, GL_GEOMETRY_OUTPUT_...原创 2019-06-17 22:48:51 · 374 阅读 · 0 评论 -
openGL之API学习(一零三)glGetActiveUniform
获取活跃一致变量的信息。变量可以在程序执行期间被访问,则该变量被认为是活动的void glGetActiveUniform( GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLint *size, GLenum *type, GLch...原创 2019-07-07 18:11:56 · 607 阅读 · 0 评论 -
openGL之API学习(一零四)原子计数 Atomic Counters atomic_uint
原子计数器(Atomic counters)是OpenGL4.2的新功能,能够用于渲染管线的各个阶段,完整的文档规范说明在GL_ARB_shader_atomic_counters。原子计数器是一块缓冲区(缓冲区对象,存放了一个或多个整型),通过GLSL内置函数atomicCounterIncrement()增加计数,通过atomicCounterDecrement()减少计数。一个简单但...原创 2019-07-07 22:57:19 · 1270 阅读 · 0 评论 -
openGL之API学习(一零五)glGetUniformLocation
获取一致变量在着色器程序中的位置序号,通过该序号可以设置一致变量的值,如果没有该变量则返回-1GLint glGetUniformLocation( GLuint program, const GLchar *name);program Specifies the program object to be queried.指定着色器程序的标识符name...原创 2019-07-07 23:04:14 · 2527 阅读 · 0 评论 -
openGL之API学习(一零六)wglGetProcAddress
获取当前显卡中OpenGL函数的指针地址PROC wglGetProcAddress( LPCSTR Arg1);Arg1Points to a null-terminated string that is the name of the extension function. The name of the extension function must be identic...原创 2019-07-07 23:34:16 · 1288 阅读 · 0 评论 -
openGL之API学习(一零七)glGetActiveAttrib
从顶点属性(位置、纹理、颜色、法线)序号获取着色器中顶点属性的名称、类型等信息。顶点属性序号可通过glGetProgram GL_ACTIVE_ATTRIBUTES来获取。如果在链接操作期间确定属性变量可以在程序执行期间被访问,则该属性变量被认为是活动的,如gl_Vertex、gl_Normal等。void glGetActiveAttrib( GLuint program, ...原创 2019-07-08 22:31:55 · 649 阅读 · 0 评论 -
openGL之API学习(九十五)glProgramBinary
将着色器程序的二进制数据加载进着色器程序。二进制数据由glGetProgramBinary生成。使用二进制数据可以避免编译开销,并且不用呈现shader的源代码。OpenGL并不指定任何二进制格式,二进制格式完全由各个实现的供应商决定,这意味着使用glProgramBinary的程序的可移植性不强,即使同一供应商的不同版本之间,二进制格式也可能改变。所以,为了确保程序兼容,在调用glProgram...原创 2019-06-28 23:34:26 · 2204 阅读 · 0 评论 -
openGL之API学习(七十三)opengl与Direct3D(D3D)
架构上:在架构上其实两者没有什么区别,只是D3D的runtime是在OS里,对于不同硬件来说都是一样的。而OpenGL的runtime直接是和驱动合为一体的。但这并不会造成性能有所差别。shader上:OpenGL 的原生shading language是GLSL,D3D的是HLSL。两者语法相似,但细节上天差地别。好在,NVIDIA的Cg在很大程度上类似于HLSL,而且可以编译 ...原创 2019-05-20 15:10:11 · 633 阅读 · 0 评论