glVertexAttribPointer 用法简介
在内存中采用交叉模式存储,向gpu传入顶点数据的方法
GPU:
#version 100
attribute highp vec2 aPosition;
attribute highp vec2 aTexcoord;
CPU:
init()
//将顶点数组元素都存入一个缓存对象中 static const float position[] = { -1.0f, -1.0f,0.0f,1.0f,//2 顶点位置 2 纹理坐标 1.0f, -1.0f,1.0f,0.0f, -1.0f, 1.0f,0.0f,1.0f, 1.0f, 1.0f,1.0f,1.0f }; //-----------基于索引绘制 static const GLushort plane_indices[] = { 0, 1, 2, 3 }; glGenBuffers(1, &_index_buffer); glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, _index_buffer); glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(plane_indices), plane_indices, GL_STATIC_DRAW); //-------------- glGenBuffers(1, &_quad_vbo); glBindBuffer(GL_ARRAY_BUFFER, _quad_vbo); glBufferData(GL_ARRAY_BUFFER, sizeof(position), NULL, GL_STATIC_DRAW); glBufferSubData(GL_ARRAY_BUFFER, 0, sizeof(position), position); glGenVertexArrays(1, &_vao); glBindVertexArray(_vao); GLint naPosition = mProgram->getAttribLocation("aPosition"); glEnableVertexAttribArray(0); //注意,这里的offset 是内存中大小的偏移,必须准确计算出内存大小偏移量 sizeof glVertexAttribPointer(naPosition, 2, GL_FLOAT, GL_FALSE, 4*sizeof(float), (GLvoid*)0); GLint naTexcoord = mProgram->getAttribLocation("aTexcoord"); glEnableVertexAttribArray(1); glVertexAttribPointer(naTexcoord, 2, GL_FLOAT, GL_FALSE, 4 * sizeof(float), (const GLvoid*)(2*sizeof(float))); glBindVertexArray(0); glDisableVertexAttribArray(0); glDisableVertexAttribArray(1);
---------------------
作者:皮皮虾图形学
来源:CSDN
原文:glVertexAttribPointer 用法简介
版权声明:本文为博主原创文章,转载请附上博文链接!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理