我正在尝试为mac os实现OpenGL刷。使用GLPaint作为样本。主要的麻烦是GLPaint是iOS应用程序,我需要它在mac os上。不知怎的,我几乎把它编辑成在MAC OS上运行(至少我是这么认为的),但它仍然没有运行。我想,主要问题是'EAGLContext'和'NSOpenGLContext'或者'OpenGL'和'OpenGL ES'< / em>差异。当我尝试使用'renderLineFromPoint:ToPoint:'
时[self renderLineFromPoint:vieta toPoint:buvusVieta];
它在
显示错误错误代码
主题1:EXC_BAD_ACCSESS(代码= 1,地址= 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在两点之间画线,或者在每个注册点绘制例如圆。有什么想法吗?
答案 0 :(得分:2)
我认为你不小心启用了一个断点。只需删除断点或禁用它。
答案 1 :(得分:1)
我解决了我的问题。我只需要使用
鼠标按下 的mouseDragged mouseUp事件
函数注册鼠标事件,然后调用函数[self drawSomething];在女巫写的是绘制和使用坐标巫婆由'mouseDown''mouseDragged''mouseUp'给我。