- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
最佳答案
are loaded in program memory of the respective type processors in the GPU
我非常确定编译的着色器与着色单元保持“足够接近”,以使加载本身非常高效。指令缓存包含必要的数据,并且很容易用 VRAM 中的数据重写它们。毕竟,不需要 CPU 同步,一切都完全在 GPU 内发生。
这里需要注意的重要一点是,现代 GPU 不再具有“各自类型的处理器”;他们实际上只使用可以运行各种计算的通用着色单元,包括但不限于片段和顶点着色。
Despite having a complex rendering pipeline and multiple shaders, games are often able to give very good FPS(1) which means program loading is probably happening thousands of times each second.
是的,现代游戏可以有数千个管道设置来绘制框架。 GPU速度很快。现代 OpenGL 使更多程序能够更轻松地使用单独的着色器对象扩展,这有助于使渲染更加模块化。
- (Mini question related to (1)) Where can I find more information regarding correlation between internal GPU bus bandwidth vs performance(or FPS)?
这个问题太宽泛,无法回答,并且在很大程度上取决于工作量。 This is an interesting document不过,这可能会解答您的问题,并可能激发您进行进一步的研究。
总而言之,glUseProgram
本身通常在现代驱动程序上几乎不会做任何事情(就性能而言)。这是因为驱动程序使用一种惰性评估形式,并且只有在确定哪些绘制调用将使用它们时才真正提交状态更改。现在,驱动程序在优化不必要的调用、重新排序等方面的效率完全取决于实现。
- Are shaders compiled on client or on device?
按照 OpenGL 的术语,它们是在服务器上编译的,但这并不一定意味着物理设备。通常,驱动程序的操作系统驻留部分负责执行着色器编译。
- Post compilation, are shader programs stored in GPU's(shared) memory or are processor caches big enough to hold many shaders?
两者都有。程序存储在全局内存中,如果可能的话,存储在每个处理器的指令高速缓存中,该指令高速缓存为几千字节。这取决于着色器的大小和缓存的大小,但通常应该适合一些。缓存在运行时以 LRU 方式填充。
关于opengl - glUseProgram() 在硬件级别如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30969232/
我认为(我不确定),每当我们调用 glUseProgram() 时,顶点着色器、碎片着色器、几何着色器等都会加载到 GPU 中相应类型处理器的程序内存中(例如顶点着色器 -> 顶点着色器)着色器处理器
我在纹理上使用 opengl 着色器。一旦纹理完成着色,我想停止 glUseProgram() 函数。 目前,着色器正在超越一切,包括我不需要着色的 rectf() 函数。 我尝试了 glUsePro
这与 Switch shader program in WebGL 有关,但我想重新提出这个问题,现在我对问题和我想问的问题有了更清晰的认识。 我正在尝试在不同的着色器程序之间切换,但在同一渲染中切换
The OpenGL docs for glUseProgram声称使用零参数对其进行调用将导致着色器执行的结果为undefined。 但是,经过一些搜索,我看到了一些使用glUseProgram卸载
假设我有一些代码在不同点调用 glUseProgram(programId) ,但有时最终会使用相同的参数调用 glUseProgram(1) 两次(即program1被请求两次)。 我应该消除对 g
我正在用 C 语言学习 OpenGL 和 Win32,我刚刚开始想要实现着色器。我这样做更多是作为一种学习体验而不是一个项目,所以我决定不使用典型的扩展管理器库,如 glew 或其他东西。这是我的扩展
我在以下代码中的 glUseProgram(mYUVProgram); 处收到 GL_INVALID_VALUE , 0x0501 错误。它发生在恢复应用程序时。根据glUseProgram docs
glUseProgram() 有多快?有没有更好(更快)的东西?: 这是我的想法: 使用 1 个通用着色器程序,但具有许多输入设置和属性(每个图形类的设置) 为每个图形类使用 1 个以上的着色器 更改
在 OpenGL 中,glUseProgram() 和 glUseShaderProgram() 有什么区别? MESA 和 Nvidia 似乎都提供了 glext.h,而在 GLEW 中,两者都有定
我正在关注 OpenGL v3.3 教程,该教程指示我使用 glUniform4f 修改片段着色器中的统一属性(请参阅下面的代码)。据我了解,OpenGL 是一个状态机,我们不会取消绑定(bind)当
调用禁用 glsl 程序是否需要 50 毫秒? 我之前做了一个glFlush,所以它不可能是在程序改变之前被刷新的管道。 启用着色器需要 0.03 毫秒。 最佳答案 只是猜测 - 如果您在启用兼容性的
关于如何进一步调试此 opengl 错误的任何想法? 1281 我正在从文件加载源代码、编译、链接,然后在 glUseProgram 之后尝试检查错误 在我对象的绘制方法中.. log.info(gl
我想出了渲染矩形的代码,但着色器不起作用。它仍然是空白的白色。 这里我将包含重要的代码 主要内容: float verts[] = { -.5f, -.5f, .0f, -.5f,
当我使用 glUseProgram 设置一个 prgram 时,然后通过 glGetIntegerv(GL_CURRENT_PROGRAM, &pid) 检查当前程序,但是 pid 返回 0。所以我不
我正在 Android 上的 OpenGL ES 2.0 中实现一个引擎。我有多个着色器,对象可以采用多个纹理。 我的目标是尽量减少对 OpenGL 的纹理绑定(bind)调用,因此我保留了每个着色器
我读到在 OpenGL 2(尤其是 ES)中优化非透明对象渲染顺序的最佳方法是优先避免上下文更改(绑定(bind)不同的缓冲区、着色器程序等)而不是深度排序。 如果你用一个已经绑定(bind)的缓冲区
该程序是使用 SDL2 和 openGL 用 C 语言编写的。只要我注释掉 //glUseProgram(0); 程序编译运行并显示glCleared颜色。包括 gl 版本检查: const char
我正在尝试将一些 openGL 处理转移到 C++ 类中,该类包装在 Objective-C 类中以用于 iOS。它的大部分似乎都有效,但我没有将渲染结果放入帧缓冲区。当我用 glGetError()
我正尝试按照 https://open.gl/drawing 上的示例学习 openGL 3.0 (它只是在屏幕上绘制一个彩色矩形)。 我在 VS2015 社区中使用 SDL2.0.5 和 glew
我是一名优秀的程序员,十分优秀!