0

NSStringをモノクロのOpenGLテクスチャにレンダリングしたいと思います。iOSでそれを行う方法について多くの例を見つけましたが、OSXで機能するコードスニペットを見つけるのに苦労しています。

テクスチャをGPUにアップロードして最後のビットを実行する方法を知っていますが、生の(ピクセルあたり8ビット)データを取得するにはどうすればよいですか?

4

1 に答える 1

2

AppleのCocoaOpenGLコードサンプルの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を呼び出します。
于 2013-01-19T20:35:18.903 に答える