如何创建没有着色器的现代程序
How to create modern program without shaders?
我创建了一个使用旧函数(vertexpointer)的程序,我想用现代函数使它更快。
我想我应该创建一个纯的,新的,但我想我可以在这里问这个问题之前,我创建一个新的。
我试着替换一个绘图函数,其他的也出错了!
init函数:
glGenBuffers(10,vbo);
glBindBuffer(GL_ARRAY_BUFFER,vbo[0]);
glBufferData(GL_ARRAY_BUFFER,sizeof(float)*vertSize,vert,GL_DYNAMIC_DRAW);
glBindBuffer(GL_ARRAY_BUFFER,vbo[1]);
glBufferData(GL_ARRAY_BUFFER,sizeof(float)*normalsSize,normals,GL_DYNAMIC_DRAW);
glGenVertexArrays(1,&vao);
glBindVertexArray(vao);
glEnableVertexAttribArray(pSlot);
glEnableVertexAttribArray(nSlot);
glBindBuffer(GL_ARRAY_BUFFER,vbo[0]);
glVertexAttribPointer(pSlot,3,GL_FLOAT,GL_FALSE,0,0);
glBindBuffer(GL_ARRAY_BUFFER,vbo[1]);
glVertexAttribPointer(nSlot,3,GL_FLOAT,GL_FALSE,0,0);
我对这幅画不了解
我应该使用这些:
glBindAttribLocation(prog, pSlot, "inVer");
glBindAttribLocation(prog, nSlot, "inNorm");
但是它接受一个prog
参数
问题是,如果我使用着色器,我应该重写整个程序,如果我错了,告诉我,如何创建着色器而不创建统一的投影矩阵,模型视图矩阵,并直接使用矩阵堆栈,请。
所以什么是最新的东西,我应该使用只有创建init函数改变绘图函数,但不使用着色器?如果这是可用的,pSlot和nSlot的值是多少?(我认为0和2,因为旧的gl_Vertex和gl_normal(或类似的东西)在着色器中使用这些数字)
如果你忽略了着色器,那么你就只能使用3.0以前的顶点属性(位置,颜色,法线,texcods,颜色索引)。你应该使用glVertexPointer
, glColorPointer
, glNormalPointer
和家族,而不是通用的glVertexAttribPointer
。你不需要使用glBindAttribLocation
,因为通用(编号)属性是用于着色器的。
你已经在使用缓冲区对象了,这对于性能来说是非常好的。
绘图函数(glDrawArrays*, gl(Multi)DrawElements*)对于固定函数和。兼容性配置文件应该允许您使用固定的功能,同时仍然使用GL3的特性,如实例化。
为什么这样做?我不知道;
我以为别人会给出正式的答案。但是这里是:
不,你不能使用现代(可编程)OpenGL没有着色器
- 在iOS应用程序中创建数据库
- 使用CLANG内联程序集创建C++预增量操作
- VS2017 中缺少 Win32 控制台应用程序.如何创建C++空项目?
- Linux 从永远在线的应用程序中创建和删除文件
- 如何在 c++ 生成器 6 中从应用程序源代码创建 dll
- 该程序应该创建一个带有结果的输出文件,但文件中没有任何内容
- Mac OS X:应用程序可以创建日志文件
- 使用QT安装程序框架创建.msi安装程序
- 在多线程程序中创建OpenGL结构
- 如何翻译使用预构建的QT安装程序框架创建的安装程序,无论OS语言如何
- 如何在 c++ 程序中创建内部数据库
- 我将如何在我的程序中创建计算
- 在QT应用程序中创建并执行函数
- 如何在C 程序中创建终端命令
- 程序如何创建另一个可执行文件
- 可以控制台应用程序自行创建窗口
- 从 UMDF 驱动程序调用创建文件时出现'Access is denied'错误 (C++)
- 在一个应用程序中创建两个窗口
- 如何在VCL表单应用程序中创建和调用函数
- C++:我的程序在创建对象时崩溃