gpt4 book ai didi

objective-c - 如何在Cocoa OpenGLView中使用glClearBuffer*来清除颜色缓冲区

转载 作者:行者123 更新时间:2023-12-03 17:40:04 25 4
gpt4 key购买 nike

我试图了解如何使用 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 ,您可以替换 01 .

关于objective-c - 如何在Cocoa OpenGLView中使用glClearBuffer*来清除颜色缓冲区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19576478/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com