I'm working on porting over some ray tracing code from a C++ project. So far 
things have been fine, but they used this library called 
[stb_image.h](https://github.com/nothings/stb/blob/master/stb_image.h) to load 
in textures.

I thought I would try to create a wrapper for the single function that is used 
"stbi_load()"

So far I've got this (filename "stb_image.nim") 
    
    
    # This file is a wrapper of a subset for the "stb_image.h" library that is
    # needed for the raytracer
    
    # Required before including the stb_image.h header
    {.emit: """
    #define STB_IMAGE_IMPLEMENTATION
    """.}
    
    # Internal function
    proc stbi_load(filename: cstring; x, y, comp: var cint; req_comp: cint): 
cstring
      {.importc: "stbi_load", header: "stb_image.h".}
    
    
    ## External function (the Nim friendly version)
    proc stbi_load*(filename: string; x, y, comp: var int; req_comp: int): 
seq[uint8] =
      var
        width: cint
        height: cint
        comp2: cint
        pixelData: seq[uint8]
      
      let data = stbi_load(filename.cstring, width, height, comp2, 
req_comp.cint)
      
      # Set the data
      x = width.int
      y = width.int
      comp = comp2.int
      
      newSeq(pixelData, x * y)
      # TODO set the pixelData
      
      return pixelData
    
    

I seem to be fine, until I compile and get this: 
    
    
    CC: stb_image
    Error: execution of an external compiler program 'gcc -c  -w  
-I/home/ben/bin/Nim/lib -o nimcache/stb_image.o nimcache/stb_image.c' failed 
with exit code: 1
    
    nimcache/stb_image.c:10:23: fatal error: stb_image.h: No such file or 
directory
    compilation terminated.
    

I have the stb_image.h file right alongside the nim one. What should I do here?

Also, do you think the return type cstring (for the internal function) is fine? 
stb_image() returns an unsigned char *. I figured casting it to a seq[uint8] 
should be fine.

Reply via email to