Objective c 尝试实现OpenGL画笔

Objective c 尝试实现OpenGL画笔,objective-c,xcode,macos,cocoa,opengl,Objective C,Xcode,Macos,Cocoa,Opengl,我正在尝试为mac os实现OpenGL笔刷。使用GLPaint作为样本。主要的问题是GLPaint是iOS应用程序,我需要它在mac os上运行。不知怎的,我几乎把它编辑成可以在MAC OS上运行(至少我这么认为),但它仍然没有运行。我想,主要的问题在于‘EAGLContext’和‘NSOpenGLContext’或者‘OpenGL’和‘opengles’的区别。当我尝试使用“renderLineFromPoint:ToPoint:”时 [自渲染线frompoint:vieta-toPoin

我正在尝试为mac os实现OpenGL笔刷。使用GLPaint作为样本。主要的问题是GLPaint是iOS应用程序,我需要它在mac os上运行。不知怎的,我几乎把它编辑成可以在MAC OS上运行(至少我这么认为),但它仍然没有运行。我想,主要的问题在于‘EAGLContext’和‘NSOpenGLContext’或者‘OpenGL’和‘opengles’的区别。当我尝试使用“renderLineFromPoint:ToPoint:”时

  • [自渲染线frompoint:vieta-toPoint:buvusVieta]
它显示了我的错误

  • `glBindFramebuffer(GL_FRAMEBUFFER,viewFramebufferis)
带有错误代码

线程1:EXC\U BAD\U ACCSES(代码=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];
}
-(void)renderLineFromPoint:(CGPoint)pradzia toPoint:(CGPoint)pabaiga
{
静态GLfloat*vertexBuffer=NULL;
静态整数vertexMax=64;
NSU整数vertexCount=0,计数,i;
[上下文makeCurrentContext];
glBindFramebuffer(GL_FRAMEBUFFER,viewFramebufferis);
//从点到像素的转换
CGFloat scale=self.contentsScale;
pradzia.x*=刻度;
pradzia.y*=鳞片;
pabaiga.x*=刻度;
pabaiga.y*=刻度;
//顶点数组缓冲区
if(vertexBuffer==NULL)
vertexBuffer=malloc(vertexMax*2*sizeof(GLfloat));
//在X像素处向缓冲区添加点
计数=最大值(ceilf(sqrtf((pabaiga.x-pradzia.x)*(pabaiga.x-pradzia.x)+(pabaiga.y-pradzia.y)*(pabaiga.y-pradzia.y))/kBrushPixelStep),1);
对于(i=0;i
有人能帮我吗

或者有人可以给我指出类似的示例代码


这将是非常有用的,即使有人将我链接到教程,其中解释了实时绘图等内容。我在跟踪鼠标事件和注册鼠标点方面没有问题。我只需要让OpenGL在两点之间画一条线,或者在每个注册点上画一个圆。有什么想法吗?

我想你不小心启用了断点。只需删除断点或禁用它。

我解决了我的问题。我只是不得不使用

穆斯敦 鼠标标记 鼠标

函数注册鼠标事件,然后调用函数[self drawSomething];在这本书中,巫婆写下了如何绘制和使用坐标,巫婆是由“mouseDown”mouseDragged“mouseUp”给我的