2012-06-21 3 views
1

Mac OS 용 OpenGL 브러시를 구현하려고합니다. GLPaint를 샘플로 사용. 주요 문제는 GLPaint는 IOS 응용 프로그램이며 Mac OS에서 필요합니다. 어쨌든 나는 거의 그것을 MAC OS에서 작동하도록 편집했다 (적어도 그렇게 생각한다). 그러나 여전히 실행되지는 않는다. 나는 주요 문제는 'EAGLContext' 및 'NSOpenGLContext' 아니면 'OpenGL을''는 OpenGL ES' 차이 에, 생각한다. 내가 를 사용하려고 'renderLineFromPoint : 포인트 - 투 - 포인트 :'OpenGL 브러시 구현 시도 중

  • [self renderLineFromPoint:vieta toPoint:buvusVieta];

그것은 나에게

  • `glBindFramebuffer (GL_FRAMEBUFFER, viewFramebufferis)에서 오류를 보여줍니다; EXC_BAD_ACCSESS (코드 = 1 ADRESS = 0x1508)

    항목 'renderLineFromPoint : 투 - 포인트, 「에러 코드

    스레드 1

코드 노호

- (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이 두 점 사이의 선을 그리거나 각 등록 된 점에서 원을 그리는 데 어떻게 든 필요합니다. 어떤 아이디어?

답변

1

나는 내 문제를 해결했다. 나는 단지와 mouseUp

mouseDown

를 사용하는 마우스 이벤트를 등록하고 함수를 호출하는

기능을 의 mouseDragged했다 [자기 drawSomething] 마녀에 무엇을 그리고 좌표를 사용하여 마녀가 'mouseDown' 'mouseDragged' 'mouseUp'에 의해 부여되었습니다 작성되었습니다.

2

실수로 중단 점을 사용하는 것으로 생각됩니다. 중단 점을 삭제하거나 비활성화하십시오.

+0

아, 죄송합니다. 소식이 수정되었습니다. – hockeyman