added upng library for png loading and decoding
This commit is contained in:
BIN
assets/cube.png
Executable file
BIN
assets/cube.png
Executable file
Binary file not shown.
|
After Width: | Height: | Size: 545 B |
12
src/main.c
12
src/main.c
@@ -3,6 +3,7 @@
|
||||
#include <stdbool.h>
|
||||
#include <SDL2/SDL.h>
|
||||
#include <math.h>
|
||||
#include "upng.h"
|
||||
#include "display.h"
|
||||
#include "vector.h"
|
||||
#include "light.h"
|
||||
@@ -39,7 +40,7 @@ void setup(void){
|
||||
// Creating a SDL texture that is used to display the color buffer
|
||||
color_buffer_texture = SDL_CreateTexture(
|
||||
renderer,
|
||||
SDL_PIXELFORMAT_ARGB8888,
|
||||
SDL_PIXELFORMAT_RGBA32,
|
||||
SDL_TEXTUREACCESS_STREAMING,
|
||||
window_width,
|
||||
window_height
|
||||
@@ -53,14 +54,16 @@ void setup(void){
|
||||
proj_matrix = mat4_make_perspective(fov, aspect, znear, zfar);
|
||||
|
||||
// Load the hardcoded texture data from the static array
|
||||
mesh_texture = (uint32_t*)REDBRICK_TEXTURE;
|
||||
texture_width = 64;
|
||||
texture_height = 64;
|
||||
//mesh_texture = (uint32_t*)REDBRICK_TEXTURE;
|
||||
//texture_width = 64;
|
||||
//texture_height = 64;
|
||||
|
||||
// Loads the cube values in the mesh data structure
|
||||
load_cube_mesh_data();
|
||||
load_png_texture_data("./assets/cube.png");
|
||||
//load_obj_file_data("./assets/f22.obj");
|
||||
//load_obj_file_data("./assets/cube.obj");
|
||||
|
||||
}
|
||||
|
||||
void process_input(void){
|
||||
@@ -332,6 +335,7 @@ void render(void){
|
||||
// Free memory that was dynamically allocated
|
||||
void free_resources(void) {
|
||||
free(color_buffer);
|
||||
upng_free(png_texture);
|
||||
array_free(mesh.faces);
|
||||
array_free(mesh.vertices);
|
||||
}
|
||||
|
||||
@@ -1,10 +1,25 @@
|
||||
#include <stdio.h>
|
||||
#include <stdint.h>
|
||||
#include "texture.h"
|
||||
|
||||
uint32_t* mesh_texture = NULL;
|
||||
int texture_width = 64;
|
||||
int texture_height = 64;
|
||||
|
||||
upng_t* png_texture = NULL;
|
||||
|
||||
void load_png_texture_data(char* filename) {
|
||||
png_texture = upng_new_from_file(filename);
|
||||
if (png_texture != NULL) {
|
||||
upng_decode(png_texture);
|
||||
if (upng_get_error(png_texture) == UPNG_EOK) {
|
||||
mesh_texture = (uint32_t*)upng_get_buffer(png_texture);
|
||||
texture_width = upng_get_width(png_texture);
|
||||
texture_height = upng_get_height(png_texture);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
const uint8_t REDBRICK_TEXTURE[] = {
|
||||
0x38, 0x38, 0x38, 0xff, 0x38, 0x38, 0x38, 0xff, 0x38, 0x38, 0x38, 0xff, 0x38, 0x38, 0x38, 0xff, 0x38, 0x38, 0x38, 0xff, 0x38, 0x38, 0x38, 0xff, 0x38, 0x38, 0x38, 0xff, 0x38, 0x38, 0x38, 0xff, 0x38, 0x38, 0x38, 0xff, 0x38, 0x38, 0x38, 0xff, 0x38, 0x38, 0x38, 0xff, 0x38, 0x38, 0x38, 0xff, 0x38, 0x38, 0x38, 0xff, 0x38, 0x38, 0x38, 0xff, 0x38, 0x38, 0x38, 0xff, 0x38, 0x38, 0x38, 0xff, 0x38, 0x38, 0x38, 0xff, 0x38, 0x38, 0x38, 0xff, 0x38, 0x38, 0x38, 0xff, 0x38, 0x38, 0x38, 0xff, 0x38, 0x38, 0x38, 0xff, 0x38, 0x38, 0x38, 0xff, 0x38, 0x38, 0x38, 0xff, 0x38, 0x38, 0x38, 0xff, 0x38, 0x38, 0x38, 0xff, 0x38, 0x38, 0x38, 0xff, 0x38, 0x38, 0x38, 0xff, 0x38, 0x38, 0x38, 0xff, 0x38, 0x38, 0x38, 0xff, 0x38, 0x38, 0x38, 0xff, 0x38, 0x38, 0x38, 0xff, 0x38, 0x38, 0x38, 0xff, 0x38, 0x38, 0x38, 0xff, 0x38, 0x38, 0x38, 0xff, 0x38, 0x38, 0x38, 0xff, 0x38, 0x38, 0x38, 0xff, 0x38, 0x38, 0x38, 0xff, 0x38, 0x38, 0x38, 0xff, 0x38, 0x38, 0x38, 0xff, 0x38, 0x38, 0x38, 0xff, 0x38, 0x38, 0x38, 0xff, 0x38, 0x38, 0x38, 0xff, 0x38, 0x38, 0x38, 0xff, 0x38, 0x38, 0x38, 0xff, 0x38, 0x38, 0x38, 0xff, 0x38, 0x38, 0x38, 0xff, 0x38, 0x38, 0x38, 0xff, 0x38, 0x38, 0x38, 0xff, 0x38, 0x38, 0x38, 0xff, 0x38, 0x38, 0x38, 0xff, 0x38, 0x38, 0x38, 0xff, 0x38, 0x38, 0x38, 0xff, 0x38, 0x38, 0x38, 0xff, 0x38, 0x38, 0x38, 0xff, 0x38, 0x38, 0x38, 0xff, 0x38, 0x38, 0x38, 0xff, 0x38, 0x38, 0x38, 0xff, 0x38, 0x38, 0x38, 0xff, 0x38, 0x38, 0x38, 0xff, 0x38, 0x38, 0x38, 0xff, 0x38, 0x38, 0x38, 0xff, 0x38, 0x38, 0x38, 0xff, 0x38, 0x38, 0x38, 0xff, 0x38, 0x38, 0x38, 0xff,
|
||||
0x54, 0x54, 0x54, 0xff, 0x38, 0x38, 0x38, 0xff, 0x54, 0x54, 0x54, 0xff, 0x48, 0x48, 0x48, 0xff, 0x48, 0x48, 0x48, 0xff, 0x48, 0x48, 0x48, 0xff, 0x48, 0x48, 0x48, 0xff, 0x48, 0x48, 0x48, 0xff, 0x54, 0x54, 0x54, 0xff, 0x48, 0x48, 0x48, 0xff, 0x48, 0x48, 0x48, 0xff, 0x48, 0x48, 0x48, 0xff, 0x48, 0x48, 0x48, 0xff, 0x48, 0x48, 0x48, 0xff, 0x48, 0x48, 0x48, 0xff, 0x54, 0x54, 0x54, 0xff, 0x48, 0x48, 0x48, 0xff, 0x38, 0x38, 0x38, 0xff, 0x48, 0x48, 0x48, 0xff, 0x48, 0x48, 0x48, 0xff, 0x48, 0x48, 0x48, 0xff, 0x48, 0x48, 0x48, 0xff, 0x48, 0x48, 0x48, 0xff, 0x48, 0x48, 0x48, 0xff, 0x48, 0x48, 0x48, 0xff, 0x54, 0x54, 0x54, 0xff, 0x54, 0x54, 0x54, 0xff, 0x54, 0x54, 0x54, 0xff, 0x54, 0x54, 0x54, 0xff, 0x54, 0x54, 0x54, 0xff, 0x54, 0x54, 0x54, 0xff, 0x48, 0x48, 0x48, 0xff, 0x48, 0x48, 0x48, 0xff, 0x48, 0x48, 0x48, 0xff, 0x48, 0x48, 0x48, 0xff, 0x48, 0x48, 0x48, 0xff, 0x48, 0x48, 0x48, 0xff, 0x48, 0x48, 0x48, 0xff, 0x48, 0x48, 0x48, 0xff, 0x48, 0x48, 0x48, 0xff, 0x54, 0x54, 0x54, 0xff, 0x54, 0x54, 0x54, 0xff, 0x54, 0x54, 0x54, 0xff, 0x54, 0x54, 0x54, 0xff, 0x54, 0x54, 0x54, 0xff, 0x54, 0x54, 0x54, 0xff, 0x54, 0x54, 0x54, 0xff, 0x48, 0x48, 0x48, 0xff, 0x48, 0x48, 0x48, 0xff, 0x48, 0x48, 0x48, 0xff, 0x48, 0x48, 0x48, 0xff, 0x38, 0x38, 0x38, 0xff, 0x38, 0x38, 0x38, 0xff, 0x38, 0x38, 0x38, 0xff, 0x48, 0x48, 0x48, 0xff, 0x48, 0x48, 0x48, 0xff, 0x54, 0x54, 0x54, 0xff, 0x54, 0x54, 0x54, 0xff, 0x48, 0x48, 0x48, 0xff, 0x48, 0x48, 0x48, 0xff, 0x48, 0x48, 0x48, 0xff, 0x48, 0x48, 0x48, 0xff, 0x48, 0x48, 0x48, 0xff, 0x38, 0x38, 0x38, 0xff,
|
||||
|
||||
@@ -3,12 +3,16 @@
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdint.h>
|
||||
#include "upng.h"
|
||||
|
||||
typedef struct {
|
||||
float u;
|
||||
float v;
|
||||
} tex2_t;
|
||||
|
||||
void load_png_texture_data(char* filename);
|
||||
|
||||
extern upng_t* png_texture;
|
||||
extern int texture_width;
|
||||
extern int texture_height;
|
||||
extern uint32_t* mesh_texture;
|
||||
|
||||
1281
src/upng.c
Normal file
1281
src/upng.c
Normal file
File diff suppressed because it is too large
Load Diff
81
src/upng.h
Normal file
81
src/upng.h
Normal file
@@ -0,0 +1,81 @@
|
||||
/*
|
||||
uPNG -- derived from LodePNG version 20100808
|
||||
|
||||
Copyright (c) 2005-2010 Lode Vandevenne
|
||||
Copyright (c) 2010 Sean Middleditch
|
||||
|
||||
This software is provided 'as-is', without any express or implied
|
||||
warranty. In no event will the authors be held liable for any damages
|
||||
arising from the use of this software.
|
||||
|
||||
Permission is granted to anyone to use this software for any purpose,
|
||||
including commercial applications, and to alter it and redistribute it
|
||||
freely, subject to the following restrictions:
|
||||
|
||||
1. The origin of this software must not be misrepresented; you must not
|
||||
claim that you wrote the original software. If you use this software
|
||||
in a product, an acknowledgment in the product documentation would be
|
||||
appreciated but is not required.
|
||||
|
||||
2. Altered source versions must be plainly marked as such, and must not be
|
||||
misrepresented as being the original software.
|
||||
|
||||
3. This notice may not be removed or altered from any source
|
||||
distribution.
|
||||
*/
|
||||
|
||||
#if !defined(UPNG_H)
|
||||
#define UPNG_H
|
||||
|
||||
typedef enum upng_error {
|
||||
UPNG_EOK = 0, /* success (no error) */
|
||||
UPNG_ENOMEM = 1, /* memory allocation failed */
|
||||
UPNG_ENOTFOUND = 2, /* resource not found (file missing) */
|
||||
UPNG_ENOTPNG = 3, /* image data does not have a PNG header */
|
||||
UPNG_EMALFORMED = 4, /* image data is not a valid PNG image */
|
||||
UPNG_EUNSUPPORTED = 5, /* critical PNG chunk type is not supported */
|
||||
UPNG_EUNINTERLACED = 6, /* image interlacing is not supported */
|
||||
UPNG_EUNFORMAT = 7, /* image color format is not supported */
|
||||
UPNG_EPARAM = 8 /* invalid parameter to method call */
|
||||
} upng_error;
|
||||
|
||||
typedef enum upng_format {
|
||||
UPNG_BADFORMAT,
|
||||
UPNG_RGB8,
|
||||
UPNG_RGB16,
|
||||
UPNG_RGBA8,
|
||||
UPNG_RGBA16,
|
||||
UPNG_LUMINANCE1,
|
||||
UPNG_LUMINANCE2,
|
||||
UPNG_LUMINANCE4,
|
||||
UPNG_LUMINANCE8,
|
||||
UPNG_LUMINANCE_ALPHA1,
|
||||
UPNG_LUMINANCE_ALPHA2,
|
||||
UPNG_LUMINANCE_ALPHA4,
|
||||
UPNG_LUMINANCE_ALPHA8
|
||||
} upng_format;
|
||||
|
||||
typedef struct upng_t upng_t;
|
||||
|
||||
upng_t* upng_new_from_bytes (const unsigned char* buffer, unsigned long size);
|
||||
upng_t* upng_new_from_file (const char* path);
|
||||
void upng_free (upng_t* upng);
|
||||
|
||||
upng_error upng_header (upng_t* upng);
|
||||
upng_error upng_decode (upng_t* upng);
|
||||
|
||||
upng_error upng_get_error (const upng_t* upng);
|
||||
unsigned upng_get_error_line (const upng_t* upng);
|
||||
|
||||
unsigned upng_get_width (const upng_t* upng);
|
||||
unsigned upng_get_height (const upng_t* upng);
|
||||
unsigned upng_get_bpp (const upng_t* upng);
|
||||
unsigned upng_get_bitdepth (const upng_t* upng);
|
||||
unsigned upng_get_components (const upng_t* upng);
|
||||
unsigned upng_get_pixelsize (const upng_t* upng);
|
||||
upng_format upng_get_format (const upng_t* upng);
|
||||
|
||||
const unsigned char* upng_get_buffer (const upng_t* upng);
|
||||
unsigned upng_get_size (const upng_t* upng);
|
||||
|
||||
#endif /*defined(UPNG_H)*/
|
||||
Reference in New Issue
Block a user