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.