我正在尝试为 mac os 实现 OpenGL 画笔。使用 GLPaint 作为示例。主要问题是 GLPaint 是 iOS 应用程序,我需要在 mac os 上使用它。不知怎的,我几乎编辑了它以在 MAC OS 上运行(至少我这么认为),但它仍然没有运行。我想,主要问题是在 'EAGLContext' 和 'NSOpenGLContext' 或者 'OpenGL' 和 'OpenGL ES' 差异。当我尝试使用'renderLineFromPoint:ToPoint:'
[self renderLineFromPoint:vieta toPoint:buvusVieta];
它向我显示错误
- `glBindFramebuffer(GL_FRAMEBUFFER, viewFramebufferis);
有错误代码
Thread 1: EXC_BAD_ACCSESS (code=1, adress=0x1508)
整个“renderLineFromPoint:toPoint:”代码如下
- (void) renderLineFromPoint:(CGPoint)pradzia toPoint:(CGPoint)pabaiga
{
static GLfloat* vertexBuffer = NULL;
static NSUInteger vertexMax = 64;
NSUInteger vertexCount = 0, count, i;
[context makeCurrentContext];
glBindFramebuffer(GL_FRAMEBUFFER, viewFramebufferis);
//Convert from point to pixel
CGFloat scale = self.contentsScale;
pradzia.x *= scale;
pradzia.y *= scale;
pabaiga.x *= scale;
pabaiga.y *= scale;
//Vertex array buffer
if(vertexBuffer == NULL)
vertexBuffer = malloc(vertexMax * 2 * sizeof(GLfloat));
//Add points to buffer at X pixels
count = MAX(ceilf(sqrtf((pabaiga.x - pradzia.x) * (pabaiga.x - pradzia.x) + (pabaiga.y - pradzia.y) * (pabaiga.y - pradzia.y)) / kBrushPixelStep), 1);
for(i = 0; i < count; ++i) {
if (vertexCount == vertexMax) {
vertexMax = 2 * vertexMax;
vertexBuffer = realloc(vertexBuffer, vertexMax * 2 * sizeof(GLfloat));
}
vertexBuffer[2 * vertexCount + 0] = pradzia.x + (pabaiga.x - pradzia.x) * ((GLfloat)i / (GLfloat)count);
vertexBuffer[2 * vertexCount + 1] = pradzia.y + (pabaiga.y - pradzia.y) * ((GLfloat)i / (GLfloat)count);
vertexCount += 1;
}
//Render vertex array
glVertexPointer(2, GL_FLOAT, 0, vertexBuffer);
glDrawArrays(GL_POINTS, 0, vertexCount);
//Show buffer
glBindRenderbuffer(GL_RENDERBUFFER, viewRenderbufferis);
[context presentRenderbuffer:GL_RENDERBUFFER];
}
有人可以帮助我吗?
或者也许有人可以向我指出类似的示例代码?
即使有人将我链接到解释实时绘图等内容的教程,这也会非常有用。我在鼠标事件跟踪和注册其点方面没有问题。我只需要以某种方式让 OpenGL 在两点之间绘制线条或在每个注册点绘制例如圆。有什么想法吗?
最佳答案
我认为您不小心启用了断点。只需删除断点或禁用它即可。
关于objective-c - 尝试实现OpenGL画笔,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11133814/