title: Loading embedded textures with SOIL
body: <p>I am using this answer to embed my image in the .exe:</p>
  
  <p><a href="https://stackoverflow.com/questions/4158900/embedding-resources-in-exe-using-gcc">Embedding resources in executable using GCC</a></p>
  
  <p>Here are the relevant bits of my code:</p>
  
  <pre><code>GLuint grass_DTexture;
  
  extern char binary_grass_D_bmp_start[];
  extern char binary_grass_D_bmp_size[];
  
  short loadTexture(char *imageData[], GLuint *texture) {
      *texture = SOIL_load_OGL_texture_from_memory(imageData, sizeof(*imageData), SOIL_LOAD_AUTO, SOIL_CREATE_NEW_ID, SOIL_FLAG_INVERT_Y | SOIL_FLAG_COMPRESS_TO_DXT);
  
      glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
      glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
  
      return 1;
  }
  
  loadTexture(&amp;binary_grass_D_bmp_start, &amp;grass_DTexture);
  </code></pre>
  
  <p>However the texture does not load and I just get a whitish grey surface.</p>
  
  <p>EDIT: I know this was not my original question, however I am having difficulty using mipmaps. I modified my loadTexture function to this:
      short loadTexture(char *imageData[], GLuint *texture, int width, int height) {
          glEnable(GL_TEXTURE_2D);
          glGenTextures(1, texture);
          glBindTexture(GL_TEXTURE_2D, *texture);</p>
  
  <pre><code>    glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
      glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_NEAREST);
      glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
  
      glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
      glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
  
      *texture = SOIL_load_OGL_texture_from_memory(imageData, sizeof(*imageData), SOIL_LOAD_AUTO, SOIL_CREATE_NEW_ID, SOIL_FLAG_INVERT_Y | SOIL_FLAG_COMPRESS_TO_DXT | SOIL_FLAG_MIPMAPS);
  
      //gluBuild2DMipmaps(GL_TEXTURE_2D, 3, width, height, GL_RGB, GL_UNSIGNED_BYTE, imageData);
  
      //glTexStorage2D(GL_TEXTURE_2D, 3, GL_RGBA8, width, height);
      //glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, width, height, GL_BGRA, GL_UNSIGNED_BYTE, imageData);
      //glGenerateMipmap(GL_TEXTURE_2D);
  
      glDisable(GL_TEXTURE_2D);
      return 1;
  }
  </code></pre>
  
  <p>This time, the exe crashes as soon as it is run. I am also greeted with the following warning, which could be the cause of this (probably missing an * or an &amp; somewhere):</p>
  
  <pre><code>init.c:76:2: warning: passing argument 1 of 'loadTexture' from incompatible poin
  ter type [enabled by default]
  loadTexture.h:1:7: note: expected 'char **' but argument is of type 'char (*)[]'
  </code></pre>
  
  <p>I have managed to narrow the crash to the SOIL_load_OGL_texture_from_memory call.</p>