嵌入式实践教程--OpenGL3.0 Shader使用

简介: 嵌入式实践教程--OpenGL3.0 Shader使用

OpenGL 系列文章目录



文章目录


OpenGL 系列文章目录

一、着色器

顶点着色器

片段着色器

二、设置顶点数据

三、代码


一、着色器



顶点着色器


#version 300 es
precision mediump float;    
layout(location = 0) in vec4 a_position;
layout(location = 1) in vec2 a_textureCoordinate;
out vec2 v_textureCoordinate;
void main() {
     v_textureCoordinate = a_textureCoordinate;
     gl_Position = a_position;      
}


vec4 a_position: 用于接收kotlin端传入的顶点位置

vec2 a_textureCoordinate:接收kotlin端传入的纹理的顶点位置

v_textureCoordinate:将传入的纹理顶点位置输出给片段着色器


直接指定a_position的location为0,这样可以操作location0来操作a_position,不需要像2.0那样先获取a_position的位置。


片段着色器


#version 300 es    
precision mediump float;
precision mediump sampler2D;
layout(location = 0) out vec4 fragColor;
layout(location = 0) uniform sampler2D u_texture;
in vec2 v_textureCoordinate;
void main() {
       fragColor = texture(u_texture, v_textureCoordinate);      
}


in vec2 v_textureCoordinate :从顶点着色器中接收纹理的顶点位置

out vec4 fragColor:定义输出颜色变量

u_texture:传入的纹理数据


将内置的gl_FragColor改写为输出变量。


二、设置顶点数据



由于GL画三角形是最高效的,因此使用两个三角形拼成矩形


private val vertexData = floatArrayOf(-1f,-1f,
                                        -1f,1f,
                                        1f,1f,
                                         -1f,-1f,
                                         1f,1f,
                                         1f,-1f)


激活位置0顶点的顶点数据

GLES30.glEnableVertexAttribArray(0)


第一个参数为postion,第二个参数指定部件个数为2,即三角形的个数

GLES30.glVertexAttribPointer(0, 2, GLES30.GL_FLOAT, false,0, vertexDataBuffer)


三、代码



本文使用示例代码中的ShaderFragment

相关文章
|
小程序 知识图谱 异构计算
|
存储 索引
OpenGL学习笔记(八):进一步理解VAO、VBO和SHADER,并使用VAO、VBO和SHADER绘制一个三角形 下
OpenGL学习笔记(八):进一步理解VAO、VBO和SHADER,并使用VAO、VBO和SHADER绘制一个三角形
OpenGL学习笔记(八):进一步理解VAO、VBO和SHADER,并使用VAO、VBO和SHADER绘制一个三角形 下
|
存储 C语言 C++
OpenGL学习笔记(八):进一步理解VAO、VBO和SHADER,并使用VAO、VBO和SHADER绘制一个三角形 上
OpenGL学习笔记(八):进一步理解VAO、VBO和SHADER,并使用VAO、VBO和SHADER绘制一个三角形
OpenGL学习笔记(八):进一步理解VAO、VBO和SHADER,并使用VAO、VBO和SHADER绘制一个三角形 上
|
C语言 异构计算
OpenGL shader 程序基础
Shader, 即着色器,是一种类C语法的程序,用于封装硬件相关部分的代码。与普通程序的区别在于 shader 是通过GPU来执行的。 需要给GPU而不是CPU写程序的原因是GPU在处理图形相关运算时远远快于CPU。 不同的 shader 程序在使用时编译成本机硬件支持的机器指令。
245 0
|
存储 缓存 并行计算
使用计算着色器(Compute Shader)模拟粒子效果【OpenGL】【GLSL】
使用计算着色器(Compute Shader)模拟粒子效果【OpenGL】【GLSL】
898 0
使用计算着色器(Compute Shader)模拟粒子效果【OpenGL】【GLSL】
|
存储 编译器 API
OpenGL ES Shader相关API 总结【4】—— GLSL 语法小结【持续更新】
OpenGL ES Shader相关API 总结【4】—— GLSL 语法小结【持续更新】
302 0
OpenGL ES Shader相关API 总结【4】—— GLSL 语法小结【持续更新】
|
API 索引
OpenGL ES Shader相关API 总结【2】——执行绘制命令
OpenGL ES Shader相关API 总结【2】——执行绘制命令
125 0
OpenGL ES Shader相关API 总结【2】——执行绘制命令
|
存储 API C++
OpenGL ES Shader相关API 总结【5】——VBO与VAO的作用与关系
OpenGL ES Shader相关API 总结【5】——VBO与VAO的作用与关系
171 0
|
编译器 API 异构计算
OpenGL ES Shader相关API 总结【3】——绑定shader
OpenGL ES Shader相关API 总结【3】——绑定shader
136 0
|
API C++ 异构计算
OpenGL ES Shader相关API 总结【1】——传入绘制信息
OpenGL ES Shader相关API 总结【1】——传入绘制信息
115 0