- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我试图了解如何使用 glClearBuffer* 更改 Cocoa for OS X 中(单缓冲或双缓冲)NSOpenGLView 的背景颜色。
OpenGL Superbible 建议的以下代码片段失败并出现 GL_INVALID_OPERATION:
GLfloat red[] = {1.0f, 0.0f, 0.0f, 1.0f};
glClearBufferfv(GL_COLOR, 0, red);
我需要为第二个参数提供什么?
我正在使用扩展 OpenGLView 的双缓冲 View 。
#import "MyOpenGLView.h"
#include <OpenGL/gl3.h>
@implementation MyOpenGLView
-(void) drawRect: (NSRect) bounds
{
GLfloat red[] = {1.0f, 0.0f, 0.0f, 1.0f};
glClearBufferfv(GL_COLOR, 0, red);
GLenum e = glGetError();
// e == GL_INVALID_OPERATION after this call
// and the view is drawn in black
// The following two lines work as intended:
//glClearColor(1.0, 0.f, 0.f, 1.f);
//glClear(GL_COLOR_BUFFER_BIT);
[[self openGLContext] flushBuffer];
}
@end
最佳答案
真的吗?它给你GL_INVALID_OPEARATION
?
此函数不应该生成该错误...您确定程序中较早的内容没有创建该错误并且您弄错了源吗?
然而,更大的问题是使用 GL_COLOR
因为此 API 调用中的缓冲区期望第二个参数是绘制缓冲区集的索引。目前尚不清楚您的绘制缓冲区是如何在此代码中设置的,您可能有 GL_NONE
。因为如果您在 GL_NONE
时尝试清除绘制缓冲区,则没有定义的错误行为。使用时,我想实现可能会选择提高 GL_INVALID_OPERATION
.
为了您当前使用glClearBufferfv (...)
为了有意义,我希望看到这样的东西:
GLenum buffers [] = { GL_COLOR_ATTACHMENT0, GL_COLOR_ATTACHMENT1 };
GLfloat red [] = { 1.0f, 0.0f, 0.0f, 1.0f };
glDrawBuffers (2, buffers);
glClearBufferfv (GL_COLOR, 0, red);
现在这个调用将被清除 GL_COLOR_ATTACHMENT0
,如果您想清除 GL_COLOR_ATTACHMENT1
,您可以替换 0
与 1
.
关于objective-c - 如何在Cocoa OpenGLView中使用glClearBuffer*来清除颜色缓冲区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19576478/
我目前使用 glClearBuffer* 函数来清除在 OpenGL ES 3.0 中运行的项目中的绘制缓冲区。 glClearBuffer documentation陈述如下: The glClea
我是一名优秀的程序员,十分优秀!