追記(2008/9/26):
というか訂正.QCというか3D(OpenGL等)への理解(考え方?)が間違っていました.これは親子関係レイヤーで実現するところですね.たぶん….
ということで以下は間違ってます.
で私的解(よくわかってない部分もある).
….- (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 件のコメント:
コメントを投稿