2014-10-27 49 views
4

在第一个函数中,我无法弄清楚我做错了什么。它返回行的错误, 回报compileShader(GLenum(GL_VERTEX_SHADER),ShaderCode)错误是不能援引 '初始化' 与类型的参数列表 '($ T3,NSString的)'

class ShaderHelper{ 

    class func compileVertexShader(ShaderCode: NSString) ->GLint{ 
     return compileShader(GLenum(GL_VERTEX_SHADER), ShaderCode) 
    } 

    class func compileShader(type: GLenum, shaderCode: NSString) -> GLuint{ 
     var shaderObjectId = glCreateShader(type); 

     if(shaderObjectId == 0){ 
      if(LoggerConfig.props.On){ 
       println("Could not create new shader!") 
      } 
      return 0 
     } 

     var shaderStringUTF8 = shaderCode.cStringUsingEncoding(NSUTF8StringEncoding) 
     var shaderStringLength: GLint = GLint(Int32(shaderCode.length)); 

     glShaderSource(shaderObjectId, 1, &shaderStringUTF8, &shaderStringLength) 
     glCompileShader(shaderObjectId) 

     var compileStatus = GLint() 

     glGetShaderiv(shaderObjectId, GLenum(GL_COMPILE_STATUS), &compileStatus) 

     if(compileStatus == 0){ 
      if(LoggerConfig.props.On){ 
       println("Compilation of shader failed.") 
      } 
      glDeleteShader(shaderObjectId) 
      return 0 
     }else if (compileStatus == 1){ 
      if(LoggerConfig.props.On){ 
       println("Compilation Successful") 
      } 

     } 
     return shaderObjectId; 
    } 

回答

5

这里的问题不是init方法,而是compileVertexShader和compileShader中的返回类型,而一个返回GLInt,其他返回GLuint。如果你改变这些以匹配,你的错误应该消失。

class ShaderHelper{ 

    class func compileVertexShader(ShaderCode: NSString) ->GLuint{ 
     return compileShader(GLenum(GL_VERTEX_SHADER), shaderCode: ShaderCode) 
    } 

    class func compileShader(type: GLenum, shaderCode: NSString) -> GLuint{ 
     var shaderObjectId = glCreateShader(type); 

     if(shaderObjectId == 0){ 
      if(LoggerConfig.props.On){ 
       println("Could not create new shader!") 
      } 
      return 0 
     } 

     var shaderStringUTF8 = shaderCode.cStringUsingEncoding(NSUTF8StringEncoding) 
     var shaderStringLength: GLint = GLint(Int32(shaderCode.length)); 

     glShaderSource(shaderObjectId, 1, &shaderStringUTF8, &shaderStringLength) 
     glCompileShader(shaderObjectId) 

     var compileStatus = GLint() 

     glGetShaderiv(shaderObjectId, GLenum(GL_COMPILE_STATUS), &compileStatus) 

     if(compileStatus == 0){ 
      if(LoggerConfig.props.On){ 
       println("Compilation of shader failed.") 
      } 
      glDeleteShader(shaderObjectId) 
      return 0 
     }else if (compileStatus == 1){ 
      if(LoggerConfig.props.On){ 
       println("Compilation Successful") 
      } 

     } 
     return shaderObjectId; 
} 

错误swift在调试时提供了很多没有意义的东西。你应该仔细选择参数类型和返回类型,它应该没问题。

+3

我不能相信我错过了。我喜欢你! – NJGUY 2014-10-27 17:22:33

+0

感谢'var compileStatus = GLint()',这并不明显。 – kelin 2015-12-09 07:45:34

相关问题