2008年9月24日水曜日

QCのパッチ / OpenGLで描いたものを出力するには...

追記(2008/9/26):
というか訂正.QCというか3D(OpenGL等)への理解(考え方?)が間違っていました.これは親子関係レイヤーで実現するところですね.たぶん….

ということで以下は間違ってます




なぜか調べても(Google先生にそれっぽい言葉で聞いても)なかなか解決(発見)できなかった…(まぁ選んだ言葉が悪かったのだろう.)

で私的解(よくわかってない部分もある).
- (BOOL) execute:(id)context atTime:(NSTimeInterval)time withArguments:(NSDictionary*)arguments
{
CGLContextObj cgl_ctx = [context CGLContextObj];
if(cgl_ctx == NULL)
return NO;
self.outputImage = [context outputImageProviderFromBufferWithPixelFormat:QCPlugInPixelFormatARGB8
pixelsWide:0
pixelsHigh:0
baseAddress:malloc(0)
bytesPerRow:0
releaseCallback:_BufferReleaseCallback
releaseContext:NULL
colorSpace:[context colorSpace]
shouldColorMatch:NO];


{
GLint saveMode;
glGetIntegerv(GL_MATRIX_MODE, &saveMode);
glMatrixMode(GL_MODELVIEW);
glPushMatrix();

Draw(context);//ここらで描く

glMatrixMode(GL_MODELVIEW);
glPopMatrix();
glMatrixMode(saveMode);
}
GLenum error;
if(error = glGetError())
[context logMessage:@"OpenGL error %04X", error];
return (error ? NO : YES);
}
static void _BufferReleaseCallback(const void* address, void* context)
{
free((void*)address);
}
….
参考:Apple Mailing Lists:「OpenGL Texture from a Quartz Drawing in a QC Plugin」
の,メイル中に記述してあるlinkにあったサンプルQCRoundRectx.zip


なんだかなぁ….間違ってるんかなぁ.
"baseAddress:malloc(0)"...
"baseAddress:NULL"だといろいろ調整してもだめだったんだよなぁ….
でも
malloc(0) の動作は処理系依存であり、NULL を返すかユニークなポインタを返すかのいずれかになる (ISO/IEC 9899:1990 7.10.3)。処理系に依存するため、特定の動作を期待したプログラムは書かない方が良いだろう。
http://www2s.biglobe.ne.jp/~hig/q_a/Programing_QA03.html#Q1
ってことで間違ってるんだよなぁ.

とりあえず動いたということで…MacOSX 10.5.5/Xcode 3.0/QC 3.1

でも調べてでないんだから間違ってるってことだよね.…

0 件のコメント: