如何创建没有着色器的现代程序

How to create modern program without shaders?

本文关键字:程序 何创建 创建      更新时间:2023-10-16

我创建了一个使用旧函数(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没有着色器