小编WOR*_*SER的帖子

glUseProgram()和速度后制服的行为

glUseProgram()的速度有多快?还有什么更好的(更快)?:

这是我的想法:

  1. 使用1个通用着色器程序,但有许多输入设置和属性(每个图形类的设置)
  2. 为每个图形类使用多个着色器

更改着色器程序后,哪些州是制服?他们是否保存了值(例如,矩阵的值)?

以下是我认为#1的好处:

  • 不使用glUseProgram()

而#2的好处:

  • 没有矩阵更改(例如,如果类Menu和类Scene3D具有不同的投影矩阵)

c++ opengl graphics glsl uniform

8
推荐指数
1
解决办法
2430
查看次数

最大缓冲区数

我可以使用glGenBuffers函数生成多少个缓冲区?我可以尝试生成8192(或更多)缓冲区吗?

我只渲染一个缓冲区,但我需要存储许多缓冲区.

int i = 0;
glGetIntegerv(GL_MAX_DRAW_BUFFERS, &i);
Run Code Online (Sandbox Code Playgroud)

回报8.这是缓冲区的最大计数,即同时渲染.

我对吗?

c++ opengl buffer

4
推荐指数
1
解决办法
1948
查看次数

数组大小(new [])

在调试堆中,我可以获得数组的大小,该数组由new[]以下内容创建:

int size = *((int *)((char *)ptr - 16));
Run Code Online (Sandbox Code Playgroud)

如果数组的大小小于28(但我不知道为什么?0_0),它正常工作.

这个技巧是否在发布模式下工作(不使用调试堆)?

如何获得阵列的大小(100%工作和稳定)?

c++ arrays new-operator

2
推荐指数
2
解决办法
1351
查看次数

禁用从glsl写入深度缓冲区

所有几何体都存储在一个VBO中(透明+不透明).我不能排序几何.如何在不丢失数据颜色的情况下禁止从glsl写入深度缓冲区?

opengl alphablending glsl depth-buffer

1
推荐指数
1
解决办法
2297
查看次数

为什么相等的c ++代码转换为不同的asm代码?

Visual c ++,调试模式.

if(k>=0)

011D14CE  cmp         dword ptr [k],0  
011D14D2  jl          bez+28h (11D14D8h)  

return true;

011D14D4  mov         al,1  
011D14D6  jmp         bez+33h (11D14E3h)  

return false;
011D14D8  xor         al,al  
011D14DA  jmp         bez+33h (11D14E3h)  
Run Code Online (Sandbox Code Playgroud)

和平等的代码:

return (k>=0)?(true):(false);
011D14DC  cmp         dword ptr [k],0  
011D14E0  setge       al  
Run Code Online (Sandbox Code Playgroud)

什么更快?当我在函数调用中使用第二个构造时,什么更快?

if(i>0)
    Foo(true);
else
    Foo(false);
Run Code Online (Sandbox Code Playgroud)

要么:

Foo((i>0)?(true):(false))
Run Code Online (Sandbox Code Playgroud)

c++ optimization performance assembly visual-c++

-3
推荐指数
1
解决办法
156
查看次数