

Mac上で、OpenTKを利用して、描画を行おうとしています。

サンプルを元に、背景を透明にしようとしているのですが、黒のまま変化が見られない状況です。  
以下が、そのコードです。

[code]

            gameWindow = new MonoMacGameView( new CoreGraphics.CGRect(x,y,width,height) );
           // Wire-up any required Game events
            gameWindow.Load += (sender, e) =>
            {
                // TODO: Initialize settings, load textures and sounds here
            };
    
            gameWindow.Resize += (sender, e) =>
            {
                // Adjust the GL view to be the same size as the window
                GL.Viewport(0, 0, gameWindow.Size.Width, gameWindow.Size.Height);
            };
    
            gameWindow.UpdateFrame += (sender, e) =>
            {
                // TODO: Add any game logic or physics
            };
    
            gameWindow.RenderFrame += (sender, e) =>
            {
                GL.Enable( EnableCap.AlphaTest );
                GL.Enable( EnableCap.Blend );
    
                GL.ClearColor( 0.0f,0.0f,0.0f,0.0f );
    
                // Setup buffer
                GL.Clear(ClearBufferMask.ColorBufferBit | ClearBufferMask.DepthBufferBit);
    
                GL.PushMatrix();
    
                GL.MatrixMode(MatrixMode.Projection);
    
                // Draw a simple triangle
                GL.LoadIdentity();
                GL.Ortho(-1.0, 1.0, -1.0, 1.0, 0.0, 4.0);
                GL.Begin(BeginMode.Triangles);
                GL.Color3(Color.MidnightBlue);
                GL.Vertex2(-1.0f, 1.0f);
                GL.Color3(Color.SpringGreen);
                GL.Vertex2(0.0f, -1.0f);
                //GL.Color3(Color.Ivory);
                GL.Color4( 0.0f,0.5f,0.5f,0.1f);
                GL.Vertex2(1.0f, 1.0f);
                GL.End();
    
                GL.PopMatrix();
            };
    
[/code]

NSView側の設定かもしれませんが、どのような処理を追加すればいいかがわからない状況です。  
以下の様なコードも試してみましたが、そうすると、GLの描画が消えてしまいました。

[code]

    CALayer viewLayer = CALayer.Create ();
    viewLayer.BackgroundColor = NSColor.Clear.CGColor;
    renderView.WantsLayer = false;
    renderView.Layer = viewLayer;
    ※renderViewが、GL描画を行っているNSViewです。
    
[/code]

ご助言をいただきたいと思います。


CC BY-SA 3.0
2015-10-27T15:04:04.067
18140
2015-12-16T18:21:38.393
3766
question
c# macos opengl
NSViewで描画しているOpenGLの背景を透明にしたい


OpenTKというのは使ったことないですが、OpenGLで背景色を透明にする場合は glColorMask というのを設定してから glClearします。

通常の OpenGL での記述

[code]

    glColorMask(true, true, true, true);  // Alphaも描画する設定
    glClear(GL_COLOR_BUFFER_BIT);
    glColorMask(true, true, true, false);  // 戻す
    
[/code]

動くか分かりませんが、OpenTK ではこのように書くのでしょうか。GL.Clearの前後に１行ずつ足しました。

[code]

    GL.ColorMask(true, true, true, true);  // Alphaも描画する設定
    GL.Clear(ClearBufferMask.ColorBufferBit | ClearBufferMask.DepthBufferBit);
    GL.ColorMask(true, true, true, false);  // 戻す
    
[/code]


CC BY-SA 3.0
2015-11-16T18:09:45.457
18913
2015-11-16T18:09:45.457
2079
18140
answer