2013-01-19 3 views
0

단색 OpenGL 텍스처에 NSString을 렌더링하고 싶습니다. iOS에서이 작업을 수행하는 방법에 대한 많은 예제를 발견했지만 OSX에서 작동하는 코드 스 니펫을 찾기 위해 고심하고 있습니다.OSX에서 단색 텍스처로 NSString 렌더링

GPU에 텍스처를 업로드하는 마지막 비트를 수행하는 방법을 알고 있지만 원시 (8 비트/픽셀) 데이터를 얻는 방법은 무엇입니까?

답변

2

Apple의 Cocoa OpenGL code sample에서 GLString.m을 살펴보십시오. 단색 텍스처를 생성하기 위해 쉽게 수정할 수 있습니다.

NSBitmapImageRep *bitmap = [[NSBitmapImageRep alloc] initWithBitmapDataPlanes:NULL pixelsWide:frameSize.width pixelsHigh:frameSize.height 
    bitsPerSample:8 samplesPerPixel:1 hasAlpha:NO isPlanar:NO colorSpaceName:NSDeviceWhiteColorSpace bitmapFormat:0 bytesPerRow:frameSize.width bitsPerPixel:8]; 

NSGraphicsContext *context = [NSGraphicsContext graphicsContextWithBitmapImageRep:bitmap]; 
[NSGraphicsContext saveGraphicsState]; 
[NSGraphicsContext setCurrentContext:context]; 

…  

[string drawAtPoint:NSMakePoint(marginSize.width, marginSize.height)]; // draw at offset position 

… 

[NSGraphicsContext restoreGraphicsState]; 

if (0 == texName) 
    glGenTextures (1, &texName); 

glBindTexture (GL_TEXTURE_RECTANGLE_EXT, texName); 
glTexSubImage2D(GL_TEXTURE_RECTANGLE_EXT, 0, 0, 0, texSize.width, texSize.height, GL_LUMINANCE, GL_UNSIGNED_BYTE, [bitmap bitmapData]); 

핵심 부품은 다음과 같습니다 :

  1. 가 원하는 형식으로 자신의 NSBitmapImageRep을 할당 관련 수정과 같이 보이는 코드를 초래한다.
  2. NSBitmapImageRep에 쓰는 NSGraphicsContext를 할당하십시오.
  3. 문자열을 그립니다.
  4. 그래픽 컨텍스트를 원래 상태로 복원하십시오.
  5. NSBitmapImageRep을 초기화 한 형식과 호환되는 픽셀 형식으로 glTexSubImage2D를 호출하십시오.
+0

이 예제에서는 RGB 텍스처를 생성하고 있습니다. 나는 단색을 원해. – hanno

+0

NSBitmapImageRep을 좀더 직접적으로 사용하기는 쉽습니다. 나는 대답에서 이것을하는 방법을 확장했다. – bdash

+0

감사합니다. drawAtPoint가 감가 상각 될 가능성이 있습니까? – hanno

관련 문제