2

Cocoa API を使用して OpenGL アプリケーションを作成しようとしていますが、今では 1 つのことを除いてすべて正常に動作します。メイン ウィンドウのサイズを変更すると、GL コンテキストが正しく更新されないように見えます。

ウィンドウのセットアップとコンテキストのレンダリングに使用されるコードは次のとおりです。

メインウィンドウ:

m_window = [[NSWindow alloc] initWithContentRect:window_rect styleMask:( NSClosableWindowMask | NSMiniaturizableWindowMask | NSTitledWindowMask | NSResizableWindowMask ) backing:NSBackingStoreBuffered defer:YES];

window_title = [NSString stringWithCString:m_window_title->c_str() 
                                  encoding:NSUTF8StringEncoding];

window_color = [NSColor colorWithCalibratedRed:m_window_color->getRed()
                                         green:m_window_color->getGreen()
                                          blue:m_window_color->getBlue()
                                         alpha:m_window_color->getAlpha()];

if ( m_centered )
{
    [m_window center];
}

[m_window setTitle:window_title];
[m_window setBackgroundColor:window_color];
[m_window setOneShot:YES];
[m_window setOpaque:YES];
[m_window setDelegate:window_delegate];
[m_window setAcceptsMouseMovedEvents:YES]; 

OpenGL ビュー:

NSOpenGLPixelFormatAttribute attrs[] = {NSOpenGLPFADoubleBuffer, NSOpenGLPFAWindow, NULL};

pixel_format = [[NSOpenGLPixelFormat alloc] initWithAttributes:attrs];

m_view = [[NSOpenGLView alloc] initWithFrame:[m_window contentRectForFrameRect:[m_window frame]]
                                 pixelFormat:pixel_format];
[pixel_format release];

GLint dim[2] = {GB_DEF_WINDOW_WIDTH, GB_DEF_WINDOW_HEIGHT};    
CGLContextObj ctx = (CGLContextObj) [[m_view openGLContext] CGLContextObj];
CGLSetParameter(ctx, kCGLCPSurfaceBackingSize, dim);
CGLEnable (ctx, kCGLCESurfaceBackingSize);

[[m_view openGLContext] makeCurrentContext];
[m_window setContentView:m_view]; 

これは機能するはずですが、ウィンドウのサイズが変更され、OpenGL ビューとビューポートを更新した後、バック バッファーの内容が正しくスケーリングされていないように見えます。それの何がいけないの?

返信ありがとうございます。

4

1 に答える 1

0

以下は、バック バッファーのサイズを制御します。

GLint dim[2] = {GB_DEF_WINDOW_WIDTH, GB_DEF_WINDOW_HEIGHT};

これらを変更する方法は、バック バッファーのサイズに影響します。これらの値を設定するコードを確認してください。サイズを変更するとき、たとえばウィンドウを薄くする場合、ウィンドウと同じ縦横比になるように幅の値を変更する必要があります。

バック バッファの内容は、それらが表示される最終的なビューと同じサイズである必要はないことに注意してください。違いがある場合は、バッファの内容が収まるようにスケーリングされます。縦横比が異なると、奇妙な伸縮が発生する可能性があります。

于 2010-11-11T01:27:48.557 に答える