naev 0.11.5
opengl_tex.c File Reference

This file handles the opengl texture wrapper routines. More...

#include "distance_field.h"
#include "array.h"
#include "conf.h"
#include "gui.h"
#include "log.h"
#include "md5.h"
#include "nfile.h"
#include "nstring.h"
#include "opengl.h"

Go to the source code of this file.

Data Structures

struct  glTexList
 Represents a node in the texture list. More...
 

Functions

static uint8_t SDL_GetAlpha (SDL_Surface *s, int x, int y)
 Gets the alpha value of a pixel.
 
static int SDL_IsTrans (SDL_Surface *s, int x, int y)
 Checks to see if a position of the surface is transparent.
 
static uint8_t * SDL_MapAlpha (SDL_Surface *s, int w, int h, int tight)
 Maps the surface transparency.
 
static size_t gl_transSize (const int w, const int h)
 
static GLuint gl_texParameters (unsigned int flags)
 Sets default texture parameters.
 
static GLuint gl_loadSurface (SDL_Surface *surface, unsigned int flags, int freesur, double *vmax)
 Loads a surface into an opengl texture.
 
static glTexturegl_loadNewImage (const char *path, const unsigned int flags)
 Only loads the image, does not add to stack unlike gl_newImage.
 
static glTexturegl_loadNewImageRWops (const char *path, SDL_RWops *rw, unsigned int flags)
 Only loads the image, does not add to stack unlike gl_newImage.
 
static glTexturegl_texExists (const char *path, int sx, int sy)
 Check to see if a texture matching a path already exists.
 
static int gl_texAdd (glTexture *tex, int sx, int sy)
 Adds a texture to the list under the name of path.
 
static int tex_cmp (const void *p1, const void *p2)
 
static void tex_ctxSet (void)
 
static void tex_ctxUnset (void)
 
void gl_contextSet (void)
 
void gl_contextUnset (void)
 
int gl_fboCreate (GLuint *fbo, GLuint *tex, GLsizei width, GLsizei height)
 Creates a framebuffer and its associated texture.
 
glTexturegl_loadImageData (float *data, int w, int h, int sx, int sy, const char *name)
 
glTexturegl_loadImagePadTrans (const char *name, SDL_Surface *surface, SDL_RWops *rw, unsigned int flags, int w, int h, int sx, int sy, int freesur)
 Wrapper for gl_loadImagePad that includes transparency mapping.
 
glTexturegl_loadImagePad (const char *name, SDL_Surface *surface, unsigned int flags, int w, int h, int sx, int sy, int freesur)
 Loads the already padded SDL_Surface to a glTexture.
 
glTexturegl_loadImage (SDL_Surface *surface, unsigned int flags)
 Loads the SDL_Surface to a glTexture.
 
glTexturegl_newImage (const char *path, const unsigned int flags)
 Loads an image as a texture.
 
glTexturegl_newImageRWops (const char *path, SDL_RWops *rw, const unsigned int flags)
 Loads an image as a texture.
 
glTexturegl_newSprite (const char *path, const int sx, const int sy, const unsigned int flags)
 Loads the texture immediately, but also sets it as a sprite.
 
glTexturegl_newSpriteRWops (const char *path, SDL_RWops *rw, const int sx, const int sy, const unsigned int flags)
 Loads the texture immediately, but also sets it as a sprite.
 
void gl_freeTexture (glTexture *texture)
 Frees a texture.
 
glTexturegl_dupTexture (const glTexture *texture)
 Duplicates a texture.
 
int gl_isTrans (const glTexture *t, const int x, const int y)
 Checks to see if a pixel is transparent in a texture.
 
void gl_getSpriteFromDir (int *x, int *y, const glTexture *t, const double dir)
 Sets x and y to be the appropriate sprite for glTexture using dir.
 
int gl_initTextures (void)
 Initializes the opengl texture subsystem.
 
void gl_exitTextures (void)
 Cleans up the opengl texture subsystem.
 
glTexture ** gl_copyTexArray (glTexture **tex)
 Copy a texture array.
 
glTexture ** gl_addTexArray (glTexture **tex, glTexture *t)
 Adds an element to a texture array.
 

Variables

static glTexListtexture_list = NULL
 
static SDL_threadID tex_mainthread
 
static SDL_mutex * tex_lock = NULL
 

Detailed Description

This file handles the opengl texture wrapper routines.

Definition in file opengl_tex.c.

Function Documentation

◆ gl_addTexArray()

glTexture ** gl_addTexArray ( glTexture ** tex,
glTexture * t )

Adds an element to a texture array.

Definition at line 1055 of file opengl_tex.c.

◆ gl_contextSet()

void gl_contextSet ( void )

Definition at line 79 of file opengl_tex.c.

◆ gl_contextUnset()

void gl_contextUnset ( void )

Definition at line 85 of file opengl_tex.c.

◆ gl_copyTexArray()

glTexture ** gl_copyTexArray ( glTexture ** tex)

Copy a texture array.

Definition at line 1038 of file opengl_tex.c.

◆ gl_dupTexture()

glTexture * gl_dupTexture ( const glTexture * texture)

Duplicates a texture.

Parameters
textureTexture to duplicate.
Returns
Duplicate of texture.

Definition at line 917 of file opengl_tex.c.

◆ gl_exitTextures()

void gl_exitTextures ( void )

Cleans up the opengl texture subsystem.

Definition at line 1014 of file opengl_tex.c.

◆ gl_fboCreate()

int gl_fboCreate ( GLuint * fbo,
GLuint * tex,
GLsizei width,
GLsizei height )

Creates a framebuffer and its associated texture.

Parameters
[out]fboFramebuffer object id.
[out]texTexture id.
widthWidth to use.
heightHeight to use.
Returns
0 on success.

Definition at line 252 of file opengl_tex.c.

◆ gl_freeTexture()

void gl_freeTexture ( glTexture * texture)

Frees a texture.

Parameters
textureTexture to free. (If NULL, function does nothing.)

Definition at line 862 of file opengl_tex.c.

◆ gl_getSpriteFromDir()

void gl_getSpriteFromDir ( int * x,
int * y,
const glTexture * t,
const double dir )

Sets x and y to be the appropriate sprite for glTexture using dir.

Very slow, try to cache if possible like the pilots do instead of using in O(n^2) or worse functions.

Parameters
[out]xX sprite to use.
[out]yY sprite to use.
tTexture to get sprite from.
dirDirection to get sprite from.

Definition at line 967 of file opengl_tex.c.

◆ gl_initTextures()

int gl_initTextures ( void )

Initializes the opengl texture subsystem.

Returns
0 on success.

Definition at line 1004 of file opengl_tex.c.

◆ gl_isTrans()

int gl_isTrans ( const glTexture * t,
const int x,
const int y )

Checks to see if a pixel is transparent in a texture.

Parameters
tTexture to check for transparency.
xX position of the pixel.
yY position of the pixel.
Returns
1 if the pixel is transparent or 0 if it isn't.

Definition at line 948 of file opengl_tex.c.

◆ gl_loadImage()

glTexture * gl_loadImage ( SDL_Surface * surface,
unsigned int flags )

Loads the SDL_Surface to a glTexture.

Parameters
surfaceSurface to load.
flagsFlags to use.
Returns
The glTexture for surface.

Definition at line 599 of file opengl_tex.c.

◆ gl_loadImageData()

glTexture * gl_loadImageData ( float * data,
int w,
int h,
int sx,
int sy,
const char * name )

Definition at line 292 of file opengl_tex.c.

◆ gl_loadImagePad()

glTexture * gl_loadImagePad ( const char * name,
SDL_Surface * surface,
unsigned int flags,
int w,
int h,
int sx,
int sy,
int freesur )

Loads the already padded SDL_Surface to a glTexture.

Parameters
nameName to load with.
surfaceSurface to load.
flagsFlags to use.
wNon-padded width.
hNon-padded height.
sxX sprites.
syY sprites.
freesurWhether or not to free the surface.
Returns
The glTexture for surface.

Definition at line 543 of file opengl_tex.c.

◆ gl_loadImagePadTrans()

glTexture * gl_loadImagePadTrans ( const char * name,
SDL_Surface * surface,
SDL_RWops * rw,
unsigned int flags,
int w,
int h,
int sx,
int sy,
int freesur )

Wrapper for gl_loadImagePad that includes transparency mapping.

Parameters
nameName to load with.
surfaceSurface to load.
rwRWops containing data to hash.
flagsFlags to use.
wNon-padded width.
hNon-padded height.
sxX sprites.
syY sprites.
freesurWhether or not to free the surface.
Returns
The glTexture for surface.

Definition at line 427 of file opengl_tex.c.

◆ gl_loadNewImage()

static glTexture * gl_loadNewImage ( const char * path,
const unsigned int flags )
static

Only loads the image, does not add to stack unlike gl_newImage.

Parameters
pathImage to load.
flagsFlags to control image parameters.
Returns
Texture loaded from image.

Definition at line 720 of file opengl_tex.c.

◆ gl_loadNewImageRWops()

static glTexture * gl_loadNewImageRWops ( const char * path,
SDL_RWops * rw,
unsigned int flags )
static

Only loads the image, does not add to stack unlike gl_newImage.

Parameters
pathOnly used for debugging. Can be set to NULL.
rwSDL_Rwops structure to use to load.
flagsFlags to control image parameters.
Returns
Texture loaded from image.

Definition at line 751 of file opengl_tex.c.

◆ gl_loadSurface()

static GLuint gl_loadSurface ( SDL_Surface * surface,
unsigned int flags,
int freesur,
double * vmax )
static

Loads a surface into an opengl texture.

Parameters
surfaceSurface to load into a texture.
flagsFlags to use.
freesurWhether or not to free the surface.
[out]vmaxThe maximum value in the case of an SDF texture.
Returns
The opengl texture id.

Definition at line 342 of file opengl_tex.c.

◆ gl_newImage()

glTexture * gl_newImage ( const char * path,
const unsigned int flags )

Loads an image as a texture.

May not necessarily load the image but use one if it's already open.

Parameters
pathImage to load.
flagsFlags to control image parameters.
Returns
Texture loaded from image.

Definition at line 675 of file opengl_tex.c.

◆ gl_newImageRWops()

glTexture * gl_newImageRWops ( const char * path,
SDL_RWops * rw,
const unsigned int flags )

Loads an image as a texture.

May not necessarily load the image but use one if it's already open.

Note
Does not close the SDL_RWops file.
Parameters
pathPath name used for checking cache and error reporting.
rwSDL_RWops structure to load from.
flagsFlags to control image parameters.
Returns
Texture loaded from image.

Definition at line 700 of file opengl_tex.c.

◆ gl_newSprite()

glTexture * gl_newSprite ( const char * path,
const int sx,
const int sy,
const unsigned int flags )

Loads the texture immediately, but also sets it as a sprite.

Parameters
pathImage to load.
sxNumber of X sprites in image.
syNumber of Y sprites in image.
flagsFlags to control image parameters.
Returns
Texture loaded.

Definition at line 791 of file opengl_tex.c.

◆ gl_newSpriteRWops()

glTexture * gl_newSpriteRWops ( const char * path,
SDL_RWops * rw,
const int sx,
const int sy,
const unsigned int flags )

Loads the texture immediately, but also sets it as a sprite.

Parameters
pathImage name for deduplication.
rwSDL_RWops structure to load for.
sxNumber of X sprites in image.
syNumber of Y sprites in image.
flagsFlags to control image parameters.
Returns
Texture loaded.

Definition at line 829 of file opengl_tex.c.

◆ gl_texAdd()

static int gl_texAdd ( glTexture * tex,
int sx,
int sy )
static

Adds a texture to the list under the name of path.

Definition at line 645 of file opengl_tex.c.

◆ gl_texExists()

static glTexture * gl_texExists ( const char * path,
int sx,
int sy )
static

Check to see if a texture matching a path already exists.

Note this increments the used counter if it exists.

Parameters
pathPath to the texture.
sxX sprites.
syY sprites.
Returns
The texture, or NULL if none was found.

Definition at line 614 of file opengl_tex.c.

◆ gl_texParameters()

static GLuint gl_texParameters ( unsigned int flags)
static

Sets default texture parameters.

Definition at line 211 of file opengl_tex.c.

◆ gl_transSize()

static size_t gl_transSize ( const int w,
const int h )
static

Definition at line 202 of file opengl_tex.c.

◆ SDL_GetAlpha()

static uint8_t SDL_GetAlpha ( SDL_Surface * s,
int x,
int y )
static

Gets the alpha value of a pixel.

Parameters
sSurface to get value from.
xX position of the pixel to check.
yY position of the pixel to check.
Returns
Alpha value of the pixel.

Definition at line 112 of file opengl_tex.c.

◆ SDL_IsTrans()

static int SDL_IsTrans ( SDL_Surface * s,
int x,
int y )
static

Checks to see if a position of the surface is transparent.

Parameters
sSurface to check for transparency.
xX position of the pixel to check.
yY position of the pixel to check.
Returns
0 if the pixel isn't transparent, 0 if it is.

Definition at line 139 of file opengl_tex.c.

◆ SDL_MapAlpha()

static uint8_t * SDL_MapAlpha ( SDL_Surface * s,
int w,
int h,
int tight )
static

Maps the surface transparency.

Basically generates a map of what pixels are transparent. Good for pixel perfect collision routines.

Parameters
sSurface to map it's transparency.
wWidth to map.
hHeight to map.
tightWhether or not to store transparency per bit or
Returns
0 on success.

Definition at line 159 of file opengl_tex.c.

◆ tex_cmp()

static int tex_cmp ( const void * p1,
const void * p2 )
static

Definition at line 91 of file opengl_tex.c.

◆ tex_ctxSet()

static void tex_ctxSet ( void )
static

Definition at line 67 of file opengl_tex.c.

◆ tex_ctxUnset()

static void tex_ctxUnset ( void )
static

Definition at line 73 of file opengl_tex.c.

Variable Documentation

◆ tex_lock

SDL_mutex* tex_lock = NULL
static

Definition at line 47 of file opengl_tex.c.

◆ tex_mainthread

SDL_threadID tex_mainthread
static

Definition at line 46 of file opengl_tex.c.

◆ texture_list

glTexList* texture_list = NULL
static

Texture list.

Definition at line 45 of file opengl_tex.c.