add initial loadTexture() source
This commit is contained in:
commit
87b5ff8691
10
Makefile
Normal file
10
Makefile
Normal file
@ -0,0 +1,10 @@
|
||||
export SCONSFLAGS := -Q
|
||||
|
||||
all:
|
||||
@scons
|
||||
|
||||
install:
|
||||
@scons $@
|
||||
|
||||
clean:
|
||||
@scons -c
|
6
SConstruct
Normal file
6
SConstruct
Normal file
@ -0,0 +1,6 @@
|
||||
# vim:filetype=python
|
||||
|
||||
env = Environment(LIBS = ['GL'], CFLAGS = ['-Wall', '-O2'])
|
||||
env.ParseConfig('sdl-config --cflags --libs')
|
||||
|
||||
env.Object('loadTexture.o', 'loadTexture.c')
|
59
loadTexture.c
Normal file
59
loadTexture.c
Normal file
@ -0,0 +1,59 @@
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <SDL.h>
|
||||
#include <SDL_image.h>
|
||||
#include "loadTexture.h"
|
||||
|
||||
GLuint loadTexture(const char *filename)
|
||||
{
|
||||
GLuint texture;
|
||||
SDL_Surface * temp = IMG_Load(filename);
|
||||
if (!temp)
|
||||
{
|
||||
fprintf(stderr, "Failed to load image '%s'!\n", filename);
|
||||
return 0;
|
||||
}
|
||||
|
||||
SDL_PixelFormat fmt;
|
||||
fmt.palette = NULL;
|
||||
fmt.BitsPerPixel = 32;
|
||||
fmt.BytesPerPixel = 4;
|
||||
fmt.Rmask = 0x000000FF;
|
||||
fmt.Gmask = 0x0000FF00;
|
||||
fmt.Bmask = 0x00FF0000;
|
||||
fmt.Amask = 0xFF000000;
|
||||
fmt.Rshift = 0;
|
||||
fmt.Gshift = 8;
|
||||
fmt.Bshift = 16;
|
||||
fmt.Ashift = 24;
|
||||
|
||||
SDL_Surface * texsurf = SDL_ConvertSurface(temp, &fmt, SDL_SWSURFACE);
|
||||
SDL_FreeSurface(temp);
|
||||
if (!texsurf)
|
||||
{
|
||||
fprintf(stderr, "'%s' was not converted properly!\n", filename);
|
||||
return 0;
|
||||
}
|
||||
unsigned int * pixels =
|
||||
malloc(sizeof(unsigned int) * texsurf->w * texsurf->h);
|
||||
int y;
|
||||
unsigned int dstOffset = texsurf->w * (texsurf->h - 1);
|
||||
unsigned int srcOffset = 0;
|
||||
for (y = 0; y < texsurf->h; y++)
|
||||
{
|
||||
memcpy(pixels + dstOffset,
|
||||
((unsigned int *)texsurf->pixels) + srcOffset,
|
||||
texsurf->w << 2);
|
||||
dstOffset -= texsurf->w;
|
||||
srcOffset += texsurf->w;
|
||||
}
|
||||
glGenTextures(1, &texture);
|
||||
glBindTexture(GL_TEXTURE_2D, texture);
|
||||
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, texsurf->w, texsurf->h, 0,
|
||||
GL_RGBA, GL_UNSIGNED_BYTE, pixels);
|
||||
|
||||
SDL_FreeSurface(texsurf);
|
||||
free(pixels);
|
||||
return texture;
|
||||
}
|
22
loadTexture.h
Normal file
22
loadTexture.h
Normal file
@ -0,0 +1,22 @@
|
||||
|
||||
#ifndef LOADTEXTURE_H
|
||||
#define LOADTEXTURE_H
|
||||
|
||||
#ifdef GL_INCLUDE_FILE
|
||||
#include GL_INCLUDE_FILE
|
||||
#else
|
||||
#include <GL/gl.h>
|
||||
#endif
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
GLuint loadTexture(const char *filename);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
Loading…
x
Reference in New Issue
Block a user