2016-07-08 16 views
0

現在、私のC++ソースコードをiOS上で実行しようとしています。 OpenGLES 2.0でAndroid上で動作し、すべてをコンパイルすることができましたが、シェーダのコンパイルに問題があります。なぜiOSではglCreateShaderが0を返しますか?

import Foundation 
import GLKit 
import OpenGLES 

class SampleViewController: GLKViewController { 
    @IBOutlet var glview: GLKView! 

    override func viewDidLoad() { 
     super.viewDidLoad() 
     glview.context = EAGLContext(API: .OpenGLES2) 

     glview.drawableColorFormat = .RGBA8888 
     glview.drawableDepthFormat = .Format16 
     glview.drawableMultisample = .MultisampleNone 
     glview.drawableStencilFormat = .FormatNone 

     preferredFramesPerSecond = 60 
     let s = NSBundle.mainBundle().URLForResource("Arial", withExtension: ".ttf")?.relativePath 
     let cs = (s! as NSString).UTF8String 
     let buffer = UnsafeMutablePointer<Int8>(cs) 
     appInit(buffer) 
    } 

    override func glkView(view: GLKView, drawInRect rect: CGRect) { 
     super.glkView(view, drawInRect: rect) 
     glview.bindDrawable() 
     appRender(Int(timeSinceLastDraw * 1000), Int32(rect.width), Int32(rect.height)) 
    } 
} 

ストーリーボード上GLKViewControllerにフックアップされています。ここでは0を返すglCreateShader(GL_VERTEX_SHADER)何らかの理由で私のビューコントローラのコードです。

注:appInit(buffer)は、ブリッジヘッダーを通じてインポートされたC++コードの呼び出しです。

答えて

0

glContextが最初に存在するので、私はdrawInRectオーバーライド内で私のappInit関数を実行しなければなりません。

固定コード:

import Foundation 
import GLKit 
import OpenGLES 

class GanttViewController: GLKViewController { 
    @IBOutlet var glview: GLKView! 
    private var program = 0 

    override func viewDidLoad() { 
     super.viewDidLoad() 
     glview.context = EAGLContext(API: .OpenGLES2) 

     glview.drawableColorFormat = .RGBA8888 
     glview.drawableDepthFormat = .Format16 
     glview.drawableMultisample = .MultisampleNone 
     glview.drawableStencilFormat = .FormatNone 

     preferredFramesPerSecond = 60 
     program = 0 
    } 

    override func glkView(view: GLKView, drawInRect rect: CGRect) { 
     super.glkView(view, drawInRect: rect) 
     if(program == 0){ 
      let s = NSBundle.mainBundle().URLForResource("Arial", withExtension: ".ttf")?.relativePath 
      let cs = (s! as NSString).UTF8String 
      let buffer = UnsafeMutablePointer<Int8>(cs) 
      appInit(buffer) 
      program = 1 
     } 

     glview.bindDrawable() 
     appRender(Int(timeSinceLastDraw * 1000), Int32(rect.width), Int32(rect.height)) 
    } 
} 
関連する問題