calebuharrison / LibGL

OpenGL bindings for Crystal
MIT License
14 stars 6 forks source link

argument 'string' of 'LibGL#shader_source' must be Pointer(Pointer(UInt8)), not Pointer(String) #4

Open vinhig opened 5 years ago

vinhig commented 5 years ago

Hey, I'm trying your lib. It looks good but I had a problem with shaders.

def load_shaders(path : String)
  vertex_id = LibGL.create_shader(LibGL::VERTEX_SHADER)
  fragment_id = LibGL.create_shader(LibGL::FRAGMENT_SHADER)

  vertex_code = File.read(path + ".vs")
  fragment_code = File.read(path + ".fs")

  LibGL.shader_source(vertex_id, 1, pointerof(vertex_code), nil)
  LibGL.compile_shader(vertex_id)

  LibGL.shader_source(fragment_id, 1, pointerof(fragment_code), nil)
  LibGL.compile_shader(fragment_id)

  program_id = LibGL.create_program()
  LibGL.attach_shader(program_id, vertex_id)
  LibGL.attach_shader(program_id, fragment_id)
  LibGL.link_program(program_id)

  LibGL.detach_shader(program_id, vertex_id)
  LibGL.detach_shader(program_id, fragment_id)

  LibGL.delete_shader(vertex_id)
  LibGL.delete_shader(fragment_id)

  return program_id
end

With that simple method used to load shaders, i got this error :

in src/endiver.cr:13: argument 'string' of 'LibGL#shader_source' must be Pointer(Pointer(UInt8)), not Pointer(String)

  LibGL.shader_source(vertex_id, 1, pointerof(vertex_code), nil)
                                    ^

How can I pass the string content of my shader ?

Sincerely yours

DianeLooney commented 4 years ago

Just over a year late, but I found an example usage in prism:

https://github.com/neutrinog/prism/blob/4ec5befef289b0e7abad9987559c6285af3f2720/src/prism/core/shader/shader_program.cr#L355

vinhig commented 4 years ago

Wow, thanks. Better late than never ^^.