mirror of
https://github.com/libretro/RetroArch
synced 2025-04-01 13:20:43 +00:00
commit
1358e33fb0
6
deps/vitaGL/README.md
vendored
6
deps/vitaGL/README.md
vendored
@ -31,6 +31,10 @@ Direct OpenGL Usage:<br>
|
|||||||
[vitaET](https://github.com/Rinnegatamante/vitaET) - Port of ET: Legacy (Wolfenstein: Enemy Territory)<br>
|
[vitaET](https://github.com/Rinnegatamante/vitaET) - Port of ET: Legacy (Wolfenstein: Enemy Territory)<br>
|
||||||
[flycast](https://github.com/Rinnegatamante/flycast) - Port of flycast (Dreamcast Emulator)<br>
|
[flycast](https://github.com/Rinnegatamante/flycast) - Port of flycast (Dreamcast Emulator)<br>
|
||||||
[AvP Gold](https://github.com/Rinnegatamante/AvP-Gold-Vita) - Port of Aliens versus Predator: Gold Edition<br>
|
[AvP Gold](https://github.com/Rinnegatamante/AvP-Gold-Vita) - Port of Aliens versus Predator: Gold Edition<br>
|
||||||
|
[re3-vita](https://vitadb.rinnegatamante.it/#/info/589) - Port of Grand Theft Auto III<br>
|
||||||
|
[prboom-plus](https://vitadb.rinnegatamante.it/#/info/591) - Port of PrBoom Plus (Doom engine sourceport)<br>
|
||||||
|
[VITAlbum](https://vitadb.rinnegatamante.it/#/info/566) - Filebrowser and image viewer app<br>
|
||||||
|
[sm64-vita](https://github.com/bythos14/sm64-vita) - Port of Super Mario 64<br>
|
||||||
|
|
||||||
Libraries:<br>
|
Libraries:<br>
|
||||||
[sdl12_gl](https://github.com/Rinnegatamante/SDL-Vita/tree/sdl12_gl/src) - SDL 1.2 Vita port adapted to work with vitaGL as renderer<br>
|
[sdl12_gl](https://github.com/Rinnegatamante/SDL-Vita/tree/sdl12_gl/src) - SDL 1.2 Vita port adapted to work with vitaGL as renderer<br>
|
||||||
@ -42,5 +46,5 @@ sdl12_gl Apps:<br>
|
|||||||
[ZeldaROTH](https://vitadb.rinnegatamante.it/#/info/109) - Port of Zelda: Return of the Hylian<br>
|
[ZeldaROTH](https://vitadb.rinnegatamante.it/#/info/109) - Port of Zelda: Return of the Hylian<br>
|
||||||
[Zelda3T](https://vitadb.rinnegatamante.it/#/info/334) - Port of Zelda: Time to Triumph<br>
|
[Zelda3T](https://vitadb.rinnegatamante.it/#/info/334) - Port of Zelda: Time to Triumph<br>
|
||||||
[ZeldaNSQ](https://vitadb.rinnegatamante.it/#/info/350) - Port of Zelda: Navi's Quest<br>
|
[ZeldaNSQ](https://vitadb.rinnegatamante.it/#/info/350) - Port of Zelda: Navi's Quest<br>
|
||||||
[vitaWolfen](https://vitadb.rinnegatamante.it/#/info/31) - Port of Wolf4SDL<br>
|
[vitaWolfen](https://vitadb.rinnegatamante.it/#/info/31) - Port of Wolf4SDL (Wolfenstein 3D)<br>
|
||||||
[meritous](https://vitadb.rinnegatamante.it/#/info/411) - Port of meritous<br>
|
[meritous](https://vitadb.rinnegatamante.it/#/info/411) - Port of meritous<br>
|
||||||
|
31
deps/vitaGL/source/custom_shaders.c
vendored
31
deps/vitaGL/source/custom_shaders.c
vendored
@ -136,19 +136,24 @@ void _vglDrawObjects_CustomShadersIMPL(GLenum mode, GLsizei count, GLboolean imp
|
|||||||
static char *shark_log = NULL;
|
static char *shark_log = NULL;
|
||||||
void shark_log_cb(const char *msg, shark_log_level msg_level, int line) {
|
void shark_log_cb(const char *msg, shark_log_level msg_level, int line) {
|
||||||
uint8_t append = shark_log != NULL;
|
uint8_t append = shark_log != NULL;
|
||||||
uint32_t size = (append ? strlen(shark_log) : 0) + strlen(msg);
|
char newline[1024];
|
||||||
shark_log = append ? realloc(shark_log, size) : malloc(size);
|
|
||||||
switch (msg_level) {
|
switch (msg_level) {
|
||||||
case SHARK_LOG_INFO:
|
case SHARK_LOG_INFO:
|
||||||
sprintf(shark_log, "%s%sI] %s on line %d", append ? shark_log : "", append ? "\n" : "", msg, line);
|
sprintf(newline, "%sI] %s on line %d", append ? "\n" : "", msg, line);
|
||||||
break;
|
break;
|
||||||
case SHARK_LOG_WARNING:
|
case SHARK_LOG_WARNING:
|
||||||
sprintf(shark_log, "%s%sW] %s on line %d", append ? shark_log : "", append ? "\n" : "", msg, line);
|
sprintf(newline, "%sW] %s on line %d", append ? "\n" : "", msg, line);
|
||||||
break;
|
break;
|
||||||
case SHARK_LOG_ERROR:
|
case SHARK_LOG_ERROR:
|
||||||
sprintf(shark_log, "%s%sE] %s on line %d", append ? shark_log : "", append ? "\n" : "", msg, line);
|
sprintf(newline, "%sE] %s on line %d", append ? "\n" : "", msg, line);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
uint32_t size = (append ? strlen(shark_log) : 0) + strlen(newline);
|
||||||
|
shark_log = realloc(shark_log, size + 1);
|
||||||
|
if (append)
|
||||||
|
sprintf(shark_log, "%s%s", shark_log, newline);
|
||||||
|
else
|
||||||
|
strcpy(shark_log, newline);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -302,7 +307,8 @@ void glDeleteShader(GLuint shad) {
|
|||||||
if (s->valid) {
|
if (s->valid) {
|
||||||
sceGxmShaderPatcherForceUnregisterProgram(gxm_shader_patcher, s->id);
|
sceGxmShaderPatcherForceUnregisterProgram(gxm_shader_patcher, s->id);
|
||||||
free((void *)s->prog);
|
free((void *)s->prog);
|
||||||
if (s->log) free(s->log);
|
if (s->log)
|
||||||
|
free(s->log);
|
||||||
}
|
}
|
||||||
s->log = NULL;
|
s->log = NULL;
|
||||||
s->valid = GL_FALSE;
|
s->valid = GL_FALSE;
|
||||||
@ -646,7 +652,8 @@ void vglBindAttribLocation(GLuint prog, GLuint index, const GLchar *name, const
|
|||||||
|
|
||||||
// Looking for desired parameter in requested program
|
// Looking for desired parameter in requested program
|
||||||
const SceGxmProgramParameter *param = sceGxmProgramFindParameterByName(p->vshader->prog, name);
|
const SceGxmProgramParameter *param = sceGxmProgramFindParameterByName(p->vshader->prog, name);
|
||||||
if (param == NULL) return;
|
if (param == NULL)
|
||||||
|
return;
|
||||||
|
|
||||||
// Setting stream index and offset values
|
// Setting stream index and offset values
|
||||||
attributes->streamIndex = index;
|
attributes->streamIndex = index;
|
||||||
@ -684,7 +691,7 @@ void vglBindAttribLocation(GLuint prog, GLuint index, const GLchar *name, const
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Equivalent of glBindAttribLocation but for sceGxm architecture when packed attributes are used
|
// Equivalent of glBindAttribLocation but for sceGxm architecture when packed attributes are used
|
||||||
void vglBindPackedAttribLocation(GLuint prog, const GLchar *name, const GLuint num, const GLenum type, GLuint offset, GLint stride) {
|
GLint vglBindPackedAttribLocation(GLuint prog, const GLchar *name, const GLuint num, const GLenum type, GLuint offset, GLint stride) {
|
||||||
// Grabbing passed program
|
// Grabbing passed program
|
||||||
program *p = &progs[prog - 1];
|
program *p = &progs[prog - 1];
|
||||||
SceGxmVertexAttribute *attributes = &p->attr[p->attr_num];
|
SceGxmVertexAttribute *attributes = &p->attr[p->attr_num];
|
||||||
@ -692,7 +699,8 @@ void vglBindPackedAttribLocation(GLuint prog, const GLchar *name, const GLuint n
|
|||||||
|
|
||||||
// Looking for desired parameter in requested program
|
// Looking for desired parameter in requested program
|
||||||
const SceGxmProgramParameter *param = sceGxmProgramFindParameterByName(p->vshader->prog, name);
|
const SceGxmProgramParameter *param = sceGxmProgramFindParameterByName(p->vshader->prog, name);
|
||||||
if (param == NULL) return;
|
if (param == NULL)
|
||||||
|
return GL_FALSE;
|
||||||
|
|
||||||
// Setting stream index and offset values
|
// Setting stream index and offset values
|
||||||
attributes->streamIndex = 0;
|
attributes->streamIndex = 0;
|
||||||
@ -714,7 +722,8 @@ void vglBindPackedAttribLocation(GLuint prog, const GLchar *name, const GLuint n
|
|||||||
bpe = sizeof(uint8_t);
|
bpe = sizeof(uint8_t);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
SET_GL_ERROR(GL_INVALID_ENUM)
|
vgl_error = GL_INVALID_ENUM;
|
||||||
|
return GL_FALSE;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -725,6 +734,8 @@ void vglBindPackedAttribLocation(GLuint prog, const GLchar *name, const GLuint n
|
|||||||
streams->indexSource = SCE_GXM_INDEX_SOURCE_INDEX_16BIT;
|
streams->indexSource = SCE_GXM_INDEX_SOURCE_INDEX_16BIT;
|
||||||
p->stream_num = 1;
|
p->stream_num = 1;
|
||||||
p->attr_num++;
|
p->attr_num++;
|
||||||
|
|
||||||
|
return GL_TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Equivalent of glVertexAttribPointer but for sceGxm architecture
|
// Equivalent of glVertexAttribPointer but for sceGxm architecture
|
||||||
|
6
deps/vitaGL/source/framebuffers.c
vendored
6
deps/vitaGL/source/framebuffers.c
vendored
@ -89,19 +89,21 @@ void glDeleteFramebuffers(GLsizei n, GLuint *framebuffers) {
|
|||||||
#endif
|
#endif
|
||||||
while (n > 0) {
|
while (n > 0) {
|
||||||
framebuffer *fb = (framebuffer *)framebuffers[n--];
|
framebuffer *fb = (framebuffer *)framebuffers[n--];
|
||||||
|
if (fb) {
|
||||||
fb->active = 0;
|
fb->active = 0;
|
||||||
if (fb->target) {
|
if (fb->target) {
|
||||||
sceGxmDestroyRenderTarget(fb->target);
|
sceGxmDestroyRenderTarget(fb->target);
|
||||||
fb->target = NULL;
|
fb->target = NULL;
|
||||||
}
|
}
|
||||||
if (fb->depth_buffer_addr) {
|
if (fb->depth_buffer_addr) {
|
||||||
vgl_mem_free(fb->depth_buffer_addr, fb->depth_buffer_mem_type);
|
vgl_mempool_free(fb->depth_buffer_addr, fb->depth_buffer_mem_type);
|
||||||
vgl_mem_free(fb->stencil_buffer_addr, fb->stencil_buffer_mem_type);
|
vgl_mempool_free(fb->stencil_buffer_addr, fb->stencil_buffer_mem_type);
|
||||||
fb->depth_buffer_addr = NULL;
|
fb->depth_buffer_addr = NULL;
|
||||||
fb->stencil_buffer_addr = NULL;
|
fb->stencil_buffer_addr = NULL;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void glBindFramebuffer(GLenum target, GLuint fb) {
|
void glBindFramebuffer(GLenum target, GLuint fb) {
|
||||||
switch (target) {
|
switch (target) {
|
||||||
|
9
deps/vitaGL/source/gxm.c
vendored
9
deps/vitaGL/source/gxm.c
vendored
@ -32,10 +32,10 @@ static void *fragment_usse_ring_buffer_addr; // fragment USSE ring buffer memblo
|
|||||||
|
|
||||||
static SceGxmRenderTarget *gxm_render_target; // Display render target
|
static SceGxmRenderTarget *gxm_render_target; // Display render target
|
||||||
static SceGxmColorSurface gxm_color_surfaces[DISPLAY_BUFFER_COUNT]; // Display color surfaces
|
static SceGxmColorSurface gxm_color_surfaces[DISPLAY_BUFFER_COUNT]; // Display color surfaces
|
||||||
static void *gxm_color_surfaces_addr[DISPLAY_BUFFER_COUNT]; // Display color surfaces memblock starting addresses
|
void *gxm_color_surfaces_addr[DISPLAY_BUFFER_COUNT]; // Display color surfaces memblock starting addresses
|
||||||
static SceGxmSyncObject *gxm_sync_objects[DISPLAY_BUFFER_COUNT]; // Display sync objects
|
static SceGxmSyncObject *gxm_sync_objects[DISPLAY_BUFFER_COUNT]; // Display sync objects
|
||||||
static unsigned int gxm_front_buffer_index; // Display front buffer id
|
unsigned int gxm_front_buffer_index; // Display front buffer id
|
||||||
static unsigned int gxm_back_buffer_index; // Display back buffer id
|
unsigned int gxm_back_buffer_index; // Display back buffer id
|
||||||
static unsigned int gxm_scene_flags = 0; // Current gxm scene flags
|
static unsigned int gxm_scene_flags = 0; // Current gxm scene flags
|
||||||
|
|
||||||
static void *gxm_shader_patcher_buffer_addr; // Shader PAtcher buffer memblock starting address
|
static void *gxm_shader_patcher_buffer_addr; // Shader PAtcher buffer memblock starting address
|
||||||
@ -197,7 +197,8 @@ void termGxmContext(void) {
|
|||||||
}
|
}
|
||||||
#ifdef HAVE_SHARK
|
#ifdef HAVE_SHARK
|
||||||
// Shutting down runtime shader compiler
|
// Shutting down runtime shader compiler
|
||||||
if (is_shark_online) shark_end();
|
if (is_shark_online)
|
||||||
|
shark_end();
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
19
deps/vitaGL/source/misc.c
vendored
19
deps/vitaGL/source/misc.c
vendored
@ -22,6 +22,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#include "shared.h"
|
#include "shared.h"
|
||||||
|
GLboolean fast_texture_compression = GL_FALSE; // Hints for texture compression
|
||||||
|
|
||||||
static void update_fogging_state() {
|
static void update_fogging_state() {
|
||||||
if (fogging) {
|
if (fogging) {
|
||||||
@ -547,3 +548,21 @@ void glClipPlane(GLenum plane, const GLdouble *equation) {
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void glHint(GLenum target, GLenum mode) {
|
||||||
|
switch (target) {
|
||||||
|
case GL_TEXTURE_COMPRESSION_HINT:
|
||||||
|
switch (mode) {
|
||||||
|
case GL_FASTEST:
|
||||||
|
fast_texture_compression = GL_TRUE;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
fast_texture_compression = GL_FALSE;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
SET_GL_ERROR(GL_INVALID_ENUM)
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
6
deps/vitaGL/source/shared.h
vendored
6
deps/vitaGL/source/shared.h
vendored
@ -57,7 +57,9 @@ extern float DISPLAY_HEIGHT_FLOAT; // Display height in pixels (float)
|
|||||||
#include "state.h"
|
#include "state.h"
|
||||||
#include "texture_callbacks.h"
|
#include "texture_callbacks.h"
|
||||||
|
|
||||||
#define SET_GL_ERROR(x) vgl_error = x; return;
|
#define SET_GL_ERROR(x) \
|
||||||
|
vgl_error = x; \
|
||||||
|
return;
|
||||||
|
|
||||||
// Texture environment mode
|
// Texture environment mode
|
||||||
typedef enum texEnvMode {
|
typedef enum texEnvMode {
|
||||||
@ -164,6 +166,8 @@ extern uint16_t *depth_clear_indices; // Memblock starting address for clear scr
|
|||||||
extern SceGxmVertexProgram *clear_vertex_program_patched; // Patched vertex program for clearing screen
|
extern SceGxmVertexProgram *clear_vertex_program_patched; // Patched vertex program for clearing screen
|
||||||
extern vector4f *clear_vertices; // Memblock starting address for clear screen vertices
|
extern vector4f *clear_vertices; // Memblock starting address for clear screen vertices
|
||||||
|
|
||||||
|
extern GLboolean fast_texture_compression; // Hints for texture compression
|
||||||
|
|
||||||
/* gxm.c */
|
/* gxm.c */
|
||||||
void initGxm(void); // Inits sceGxm
|
void initGxm(void); // Inits sceGxm
|
||||||
void initGxmContext(void); // Inits sceGxm context
|
void initGxmContext(void); // Inits sceGxm context
|
||||||
|
6
deps/vitaGL/source/state.h
vendored
6
deps/vitaGL/source/state.h
vendored
@ -91,12 +91,6 @@ typedef struct texture_unit {
|
|||||||
void *index_object;
|
void *index_object;
|
||||||
int env_mode;
|
int env_mode;
|
||||||
int tex_id;
|
int tex_id;
|
||||||
SceGxmTextureFilter min_filter;
|
|
||||||
SceGxmTextureFilter mag_filter;
|
|
||||||
SceGxmTextureAddrMode u_mode;
|
|
||||||
SceGxmTextureAddrMode v_mode;
|
|
||||||
SceGxmTextureMipFilter mip_filter;
|
|
||||||
uint32_t lod_bias;
|
|
||||||
} texture_unit;
|
} texture_unit;
|
||||||
|
|
||||||
// Framebuffer struct
|
// Framebuffer struct
|
||||||
|
173
deps/vitaGL/source/textures.c
vendored
173
deps/vitaGL/source/textures.c
vendored
@ -47,10 +47,18 @@ void glGenTextures(GLsizei n, GLuint *res) {
|
|||||||
|
|
||||||
// Reserving a texture and returning its id if available
|
// Reserving a texture and returning its id if available
|
||||||
int i, j = 0;
|
int i, j = 0;
|
||||||
for (i = 0; i < TEXTURES_NUM; i++) {
|
for (i = 1; i < TEXTURES_NUM; i++) {
|
||||||
if (!(vgl_textures[i].used)) {
|
if (!(vgl_textures[i].used)) {
|
||||||
res[j++] = i;
|
res[j++] = i;
|
||||||
vgl_textures[i].used = 1;
|
vgl_textures[i].used = 1;
|
||||||
|
|
||||||
|
// Resetting texture parameters to their default values
|
||||||
|
vgl_textures[i].min_filter = SCE_GXM_TEXTURE_FILTER_LINEAR;
|
||||||
|
vgl_textures[i].mag_filter = SCE_GXM_TEXTURE_FILTER_LINEAR;
|
||||||
|
vgl_textures[i].mip_filter = SCE_GXM_TEXTURE_MIP_FILTER_DISABLED;
|
||||||
|
vgl_textures[i].u_mode = SCE_GXM_TEXTURE_ADDR_REPEAT;
|
||||||
|
vgl_textures[i].v_mode = SCE_GXM_TEXTURE_ADDR_REPEAT;
|
||||||
|
vgl_textures[i].lod_bias = GL_MAX_TEXTURE_LOD_BIAS; // sceGxm range is 0 - (GL_MAX_TEXTURE_LOD_BIAS*2 + 1)
|
||||||
}
|
}
|
||||||
if (j >= n)
|
if (j >= n)
|
||||||
break;
|
break;
|
||||||
@ -87,8 +95,21 @@ void glDeleteTextures(GLsizei n, const GLuint *gl_textures) {
|
|||||||
int j;
|
int j;
|
||||||
for (j = 0; j < n; j++) {
|
for (j = 0; j < n; j++) {
|
||||||
GLuint i = gl_textures[j];
|
GLuint i = gl_textures[j];
|
||||||
|
if (i > 0) {
|
||||||
vgl_textures[i].used = 0;
|
vgl_textures[i].used = 0;
|
||||||
|
|
||||||
|
// Resetting texture parameters to their default values
|
||||||
|
vgl_textures[i].min_filter = SCE_GXM_TEXTURE_FILTER_LINEAR;
|
||||||
|
vgl_textures[i].mag_filter = SCE_GXM_TEXTURE_FILTER_LINEAR;
|
||||||
|
vgl_textures[i].mip_filter = SCE_GXM_TEXTURE_MIP_FILTER_DISABLED;
|
||||||
|
vgl_textures[i].u_mode = SCE_GXM_TEXTURE_ADDR_REPEAT;
|
||||||
|
vgl_textures[i].v_mode = SCE_GXM_TEXTURE_ADDR_REPEAT;
|
||||||
|
vgl_textures[i].lod_bias = GL_MAX_TEXTURE_LOD_BIAS; // sceGxm range is 0 - (GL_MAX_TEXTURE_LOD_BIAS*2 + 1)
|
||||||
|
|
||||||
gpu_free_texture(&vgl_textures[i]);
|
gpu_free_texture(&vgl_textures[i]);
|
||||||
|
if (i == tex_unit->tex_id)
|
||||||
|
tex_unit->tex_id = 0;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -293,12 +314,12 @@ void glTexImage2D(GLenum target, GLint level, GLint internalFormat, GLsizei widt
|
|||||||
gpu_alloc_mipmaps(level, tex);
|
gpu_alloc_mipmaps(level, tex);
|
||||||
|
|
||||||
// Setting texture parameters
|
// Setting texture parameters
|
||||||
sceGxmTextureSetUAddrMode(&tex->gxm_tex, tex_unit->u_mode);
|
sceGxmTextureSetUAddrMode(&tex->gxm_tex, tex->u_mode);
|
||||||
sceGxmTextureSetVAddrMode(&tex->gxm_tex, tex_unit->v_mode);
|
sceGxmTextureSetVAddrMode(&tex->gxm_tex, tex->v_mode);
|
||||||
sceGxmTextureSetMinFilter(&tex->gxm_tex, tex_unit->min_filter);
|
sceGxmTextureSetMinFilter(&tex->gxm_tex, tex->min_filter);
|
||||||
sceGxmTextureSetMagFilter(&tex->gxm_tex, tex_unit->mag_filter);
|
sceGxmTextureSetMagFilter(&tex->gxm_tex, tex->mag_filter);
|
||||||
sceGxmTextureSetMipFilter(&tex->gxm_tex, tex_unit->mip_filter);
|
sceGxmTextureSetMipFilter(&tex->gxm_tex, tex->mip_filter);
|
||||||
sceGxmTextureSetLodBias(&tex->gxm_tex, tex_unit->lod_bias);
|
sceGxmTextureSetLodBias(&tex->gxm_tex, tex->lod_bias);
|
||||||
|
|
||||||
// Setting palette if the format requests one
|
// Setting palette if the format requests one
|
||||||
if (tex->valid && tex->palette_UID)
|
if (tex->valid && tex->palette_UID)
|
||||||
@ -557,12 +578,12 @@ void glCompressedTexImage2D(GLenum target, GLint level, GLenum internalFormat, G
|
|||||||
gpu_alloc_compressed_texture(width, height, tex_format, imageSize, data, tex, 0, NULL);
|
gpu_alloc_compressed_texture(width, height, tex_format, imageSize, data, tex, 0, NULL);
|
||||||
|
|
||||||
// Setting texture parameters
|
// Setting texture parameters
|
||||||
sceGxmTextureSetUAddrMode(&tex->gxm_tex, tex_unit->u_mode);
|
sceGxmTextureSetUAddrMode(&tex->gxm_tex, tex->u_mode);
|
||||||
sceGxmTextureSetVAddrMode(&tex->gxm_tex, tex_unit->v_mode);
|
sceGxmTextureSetVAddrMode(&tex->gxm_tex, tex->v_mode);
|
||||||
sceGxmTextureSetMinFilter(&tex->gxm_tex, tex_unit->min_filter);
|
sceGxmTextureSetMinFilter(&tex->gxm_tex, tex->min_filter);
|
||||||
sceGxmTextureSetMagFilter(&tex->gxm_tex, tex_unit->mag_filter);
|
sceGxmTextureSetMagFilter(&tex->gxm_tex, tex->mag_filter);
|
||||||
sceGxmTextureSetMipFilter(&tex->gxm_tex, tex_unit->mip_filter);
|
sceGxmTextureSetMipFilter(&tex->gxm_tex, tex->mip_filter);
|
||||||
sceGxmTextureSetLodBias(&tex->gxm_tex, tex_unit->lod_bias);
|
sceGxmTextureSetLodBias(&tex->gxm_tex, tex->lod_bias);
|
||||||
|
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
@ -612,92 +633,92 @@ void glTexParameteri(GLenum target, GLenum pname, GLint param) {
|
|||||||
case GL_TEXTURE_MIN_FILTER: // Min filter
|
case GL_TEXTURE_MIN_FILTER: // Min filter
|
||||||
switch (param) {
|
switch (param) {
|
||||||
case GL_NEAREST: // Point
|
case GL_NEAREST: // Point
|
||||||
tex_unit->mip_filter = SCE_GXM_TEXTURE_MIP_FILTER_DISABLED;
|
tex->mip_filter = SCE_GXM_TEXTURE_MIP_FILTER_DISABLED;
|
||||||
tex_unit->min_filter = SCE_GXM_TEXTURE_FILTER_POINT;
|
tex->min_filter = SCE_GXM_TEXTURE_FILTER_POINT;
|
||||||
break;
|
break;
|
||||||
case GL_LINEAR: // Linear
|
case GL_LINEAR: // Linear
|
||||||
tex_unit->mip_filter = SCE_GXM_TEXTURE_MIP_FILTER_DISABLED;
|
tex->mip_filter = SCE_GXM_TEXTURE_MIP_FILTER_DISABLED;
|
||||||
tex_unit->min_filter = SCE_GXM_TEXTURE_FILTER_LINEAR;
|
tex->min_filter = SCE_GXM_TEXTURE_FILTER_LINEAR;
|
||||||
break;
|
break;
|
||||||
case GL_NEAREST_MIPMAP_NEAREST:
|
case GL_NEAREST_MIPMAP_NEAREST:
|
||||||
tex_unit->mip_filter = SCE_GXM_TEXTURE_MIP_FILTER_DISABLED;
|
tex->mip_filter = SCE_GXM_TEXTURE_MIP_FILTER_DISABLED;
|
||||||
tex_unit->min_filter = SCE_GXM_TEXTURE_FILTER_MIPMAP_POINT;
|
tex->min_filter = SCE_GXM_TEXTURE_FILTER_MIPMAP_POINT;
|
||||||
break;
|
break;
|
||||||
case GL_LINEAR_MIPMAP_NEAREST:
|
case GL_LINEAR_MIPMAP_NEAREST:
|
||||||
tex_unit->mip_filter = SCE_GXM_TEXTURE_MIP_FILTER_ENABLED;
|
tex->mip_filter = SCE_GXM_TEXTURE_MIP_FILTER_ENABLED;
|
||||||
tex_unit->min_filter = SCE_GXM_TEXTURE_FILTER_MIPMAP_POINT;
|
tex->min_filter = SCE_GXM_TEXTURE_FILTER_MIPMAP_POINT;
|
||||||
break;
|
break;
|
||||||
case GL_NEAREST_MIPMAP_LINEAR:
|
case GL_NEAREST_MIPMAP_LINEAR:
|
||||||
tex_unit->mip_filter = SCE_GXM_TEXTURE_MIP_FILTER_DISABLED;
|
tex->mip_filter = SCE_GXM_TEXTURE_MIP_FILTER_DISABLED;
|
||||||
tex_unit->min_filter = SCE_GXM_TEXTURE_FILTER_MIPMAP_LINEAR;
|
tex->min_filter = SCE_GXM_TEXTURE_FILTER_MIPMAP_LINEAR;
|
||||||
break;
|
break;
|
||||||
case GL_LINEAR_MIPMAP_LINEAR:
|
case GL_LINEAR_MIPMAP_LINEAR:
|
||||||
tex_unit->mip_filter = SCE_GXM_TEXTURE_MIP_FILTER_ENABLED;
|
tex->mip_filter = SCE_GXM_TEXTURE_MIP_FILTER_ENABLED;
|
||||||
tex_unit->min_filter = SCE_GXM_TEXTURE_FILTER_MIPMAP_LINEAR;
|
tex->min_filter = SCE_GXM_TEXTURE_FILTER_MIPMAP_LINEAR;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
SET_GL_ERROR(GL_INVALID_ENUM)
|
SET_GL_ERROR(GL_INVALID_ENUM)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
sceGxmTextureSetMinFilter(&tex->gxm_tex, tex_unit->min_filter);
|
sceGxmTextureSetMinFilter(&tex->gxm_tex, tex->min_filter);
|
||||||
break;
|
break;
|
||||||
case GL_TEXTURE_MAG_FILTER: // Mag Filter
|
case GL_TEXTURE_MAG_FILTER: // Mag Filter
|
||||||
switch (param) {
|
switch (param) {
|
||||||
case GL_NEAREST:
|
case GL_NEAREST:
|
||||||
tex_unit->mag_filter = SCE_GXM_TEXTURE_FILTER_POINT;
|
tex->mag_filter = SCE_GXM_TEXTURE_FILTER_POINT;
|
||||||
break;
|
break;
|
||||||
case GL_LINEAR:
|
case GL_LINEAR:
|
||||||
tex_unit->mag_filter = SCE_GXM_TEXTURE_FILTER_LINEAR;
|
tex->mag_filter = SCE_GXM_TEXTURE_FILTER_LINEAR;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
SET_GL_ERROR(GL_INVALID_ENUM)
|
SET_GL_ERROR(GL_INVALID_ENUM)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
sceGxmTextureSetMagFilter(&tex->gxm_tex, tex_unit->mag_filter);
|
sceGxmTextureSetMagFilter(&tex->gxm_tex, tex->mag_filter);
|
||||||
break;
|
break;
|
||||||
case GL_TEXTURE_WRAP_S: // U Mode
|
case GL_TEXTURE_WRAP_S: // U Mode
|
||||||
switch (param) {
|
switch (param) {
|
||||||
case GL_CLAMP_TO_EDGE: // Clamp
|
case GL_CLAMP_TO_EDGE: // Clamp
|
||||||
tex_unit->u_mode = SCE_GXM_TEXTURE_ADDR_CLAMP;
|
tex->u_mode = SCE_GXM_TEXTURE_ADDR_CLAMP;
|
||||||
break;
|
break;
|
||||||
case GL_REPEAT: // Repeat
|
case GL_REPEAT: // Repeat
|
||||||
tex_unit->u_mode = SCE_GXM_TEXTURE_ADDR_REPEAT;
|
tex->u_mode = SCE_GXM_TEXTURE_ADDR_REPEAT;
|
||||||
break;
|
break;
|
||||||
case GL_MIRRORED_REPEAT: // Mirror
|
case GL_MIRRORED_REPEAT: // Mirror
|
||||||
tex_unit->u_mode = SCE_GXM_TEXTURE_ADDR_MIRROR;
|
tex->u_mode = SCE_GXM_TEXTURE_ADDR_MIRROR;
|
||||||
break;
|
break;
|
||||||
case GL_MIRROR_CLAMP_EXT: // Mirror Clamp
|
case GL_MIRROR_CLAMP_EXT: // Mirror Clamp
|
||||||
tex_unit->u_mode = SCE_GXM_TEXTURE_ADDR_MIRROR_CLAMP;
|
tex->u_mode = SCE_GXM_TEXTURE_ADDR_MIRROR_CLAMP;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
SET_GL_ERROR(GL_INVALID_ENUM)
|
SET_GL_ERROR(GL_INVALID_ENUM)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
sceGxmTextureSetUAddrMode(&tex->gxm_tex, tex_unit->u_mode);
|
sceGxmTextureSetUAddrMode(&tex->gxm_tex, tex->u_mode);
|
||||||
break;
|
break;
|
||||||
case GL_TEXTURE_WRAP_T: // V Mode
|
case GL_TEXTURE_WRAP_T: // V Mode
|
||||||
switch (param) {
|
switch (param) {
|
||||||
case GL_CLAMP_TO_EDGE: // Clamp
|
case GL_CLAMP_TO_EDGE: // Clamp
|
||||||
tex_unit->v_mode = SCE_GXM_TEXTURE_ADDR_CLAMP;
|
tex->v_mode = SCE_GXM_TEXTURE_ADDR_CLAMP;
|
||||||
break;
|
break;
|
||||||
case GL_REPEAT: // Repeat
|
case GL_REPEAT: // Repeat
|
||||||
tex_unit->v_mode = SCE_GXM_TEXTURE_ADDR_REPEAT;
|
tex->v_mode = SCE_GXM_TEXTURE_ADDR_REPEAT;
|
||||||
break;
|
break;
|
||||||
case GL_MIRRORED_REPEAT: // Mirror
|
case GL_MIRRORED_REPEAT: // Mirror
|
||||||
tex_unit->v_mode = SCE_GXM_TEXTURE_ADDR_MIRROR;
|
tex->v_mode = SCE_GXM_TEXTURE_ADDR_MIRROR;
|
||||||
break;
|
break;
|
||||||
case GL_MIRROR_CLAMP_EXT: // Mirror Clamp
|
case GL_MIRROR_CLAMP_EXT: // Mirror Clamp
|
||||||
tex_unit->v_mode = SCE_GXM_TEXTURE_ADDR_MIRROR_CLAMP;
|
tex->v_mode = SCE_GXM_TEXTURE_ADDR_MIRROR_CLAMP;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
SET_GL_ERROR(GL_INVALID_ENUM)
|
SET_GL_ERROR(GL_INVALID_ENUM)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
sceGxmTextureSetVAddrMode(&tex->gxm_tex, tex_unit->v_mode);
|
sceGxmTextureSetVAddrMode(&tex->gxm_tex, tex->v_mode);
|
||||||
break;
|
break;
|
||||||
case GL_TEXTURE_LOD_BIAS: // Distant LOD bias
|
case GL_TEXTURE_LOD_BIAS: // Distant LOD bias
|
||||||
tex_unit->lod_bias = (uint32_t)(param + GL_MAX_TEXTURE_LOD_BIAS);
|
tex->lod_bias = (uint32_t)(param + GL_MAX_TEXTURE_LOD_BIAS);
|
||||||
sceGxmTextureSetLodBias(&tex->gxm_tex, tex_unit->lod_bias);
|
sceGxmTextureSetLodBias(&tex->gxm_tex, tex->lod_bias);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
SET_GL_ERROR(GL_INVALID_ENUM)
|
SET_GL_ERROR(GL_INVALID_ENUM)
|
||||||
@ -721,64 +742,64 @@ void glTexParameterf(GLenum target, GLenum pname, GLfloat param) {
|
|||||||
switch (pname) {
|
switch (pname) {
|
||||||
case GL_TEXTURE_MIN_FILTER: // Min Filter
|
case GL_TEXTURE_MIN_FILTER: // Min Filter
|
||||||
if (param == GL_NEAREST) {
|
if (param == GL_NEAREST) {
|
||||||
tex_unit->mip_filter = SCE_GXM_TEXTURE_MIP_FILTER_DISABLED;
|
tex->mip_filter = SCE_GXM_TEXTURE_MIP_FILTER_DISABLED;
|
||||||
tex_unit->min_filter = SCE_GXM_TEXTURE_FILTER_POINT;
|
tex->min_filter = SCE_GXM_TEXTURE_FILTER_POINT;
|
||||||
}
|
}
|
||||||
if (param == GL_LINEAR) {
|
if (param == GL_LINEAR) {
|
||||||
tex_unit->mip_filter = SCE_GXM_TEXTURE_MIP_FILTER_DISABLED;
|
tex->mip_filter = SCE_GXM_TEXTURE_MIP_FILTER_DISABLED;
|
||||||
tex_unit->min_filter = SCE_GXM_TEXTURE_FILTER_LINEAR;
|
tex->min_filter = SCE_GXM_TEXTURE_FILTER_LINEAR;
|
||||||
}
|
}
|
||||||
if (param == GL_NEAREST_MIPMAP_NEAREST) {
|
if (param == GL_NEAREST_MIPMAP_NEAREST) {
|
||||||
tex_unit->mip_filter = SCE_GXM_TEXTURE_MIP_FILTER_DISABLED;
|
tex->mip_filter = SCE_GXM_TEXTURE_MIP_FILTER_DISABLED;
|
||||||
tex_unit->min_filter = SCE_GXM_TEXTURE_FILTER_MIPMAP_POINT;
|
tex->min_filter = SCE_GXM_TEXTURE_FILTER_MIPMAP_POINT;
|
||||||
}
|
}
|
||||||
if (param == GL_LINEAR_MIPMAP_NEAREST) {
|
if (param == GL_LINEAR_MIPMAP_NEAREST) {
|
||||||
tex_unit->mip_filter = SCE_GXM_TEXTURE_MIP_FILTER_ENABLED;
|
tex->mip_filter = SCE_GXM_TEXTURE_MIP_FILTER_ENABLED;
|
||||||
tex_unit->min_filter = SCE_GXM_TEXTURE_FILTER_MIPMAP_POINT;
|
tex->min_filter = SCE_GXM_TEXTURE_FILTER_MIPMAP_POINT;
|
||||||
}
|
}
|
||||||
if (param == GL_NEAREST_MIPMAP_LINEAR) {
|
if (param == GL_NEAREST_MIPMAP_LINEAR) {
|
||||||
tex_unit->mip_filter = SCE_GXM_TEXTURE_MIP_FILTER_DISABLED;
|
tex->mip_filter = SCE_GXM_TEXTURE_MIP_FILTER_DISABLED;
|
||||||
tex_unit->min_filter = SCE_GXM_TEXTURE_FILTER_MIPMAP_LINEAR;
|
tex->min_filter = SCE_GXM_TEXTURE_FILTER_MIPMAP_LINEAR;
|
||||||
}
|
}
|
||||||
if (param == GL_LINEAR_MIPMAP_LINEAR) {
|
if (param == GL_LINEAR_MIPMAP_LINEAR) {
|
||||||
tex_unit->mip_filter = SCE_GXM_TEXTURE_MIP_FILTER_ENABLED;
|
tex->mip_filter = SCE_GXM_TEXTURE_MIP_FILTER_ENABLED;
|
||||||
tex_unit->min_filter = SCE_GXM_TEXTURE_FILTER_MIPMAP_LINEAR;
|
tex->min_filter = SCE_GXM_TEXTURE_FILTER_MIPMAP_LINEAR;
|
||||||
}
|
}
|
||||||
sceGxmTextureSetMinFilter(&tex->gxm_tex, tex_unit->min_filter);
|
sceGxmTextureSetMinFilter(&tex->gxm_tex, tex->min_filter);
|
||||||
sceGxmTextureSetMipFilter(&tex->gxm_tex, tex_unit->mip_filter);
|
sceGxmTextureSetMipFilter(&tex->gxm_tex, tex->mip_filter);
|
||||||
break;
|
break;
|
||||||
case GL_TEXTURE_MAG_FILTER: // Mag filter
|
case GL_TEXTURE_MAG_FILTER: // Mag filter
|
||||||
if (param == GL_NEAREST)
|
if (param == GL_NEAREST)
|
||||||
tex_unit->mag_filter = SCE_GXM_TEXTURE_FILTER_POINT;
|
tex->mag_filter = SCE_GXM_TEXTURE_FILTER_POINT;
|
||||||
else if (param == GL_LINEAR)
|
else if (param == GL_LINEAR)
|
||||||
tex_unit->mag_filter = SCE_GXM_TEXTURE_FILTER_LINEAR;
|
tex->mag_filter = SCE_GXM_TEXTURE_FILTER_LINEAR;
|
||||||
sceGxmTextureSetMagFilter(&tex->gxm_tex, tex_unit->mag_filter);
|
sceGxmTextureSetMagFilter(&tex->gxm_tex, tex->mag_filter);
|
||||||
break;
|
break;
|
||||||
case GL_TEXTURE_WRAP_S: // U Mode
|
case GL_TEXTURE_WRAP_S: // U Mode
|
||||||
if (param == GL_CLAMP_TO_EDGE)
|
if (param == GL_CLAMP_TO_EDGE)
|
||||||
tex_unit->u_mode = SCE_GXM_TEXTURE_ADDR_CLAMP; // Clamp
|
tex->u_mode = SCE_GXM_TEXTURE_ADDR_CLAMP; // Clamp
|
||||||
else if (param == GL_REPEAT)
|
else if (param == GL_REPEAT)
|
||||||
tex_unit->u_mode = SCE_GXM_TEXTURE_ADDR_REPEAT; // Repeat
|
tex->u_mode = SCE_GXM_TEXTURE_ADDR_REPEAT; // Repeat
|
||||||
else if (param == GL_MIRRORED_REPEAT)
|
else if (param == GL_MIRRORED_REPEAT)
|
||||||
tex_unit->u_mode = SCE_GXM_TEXTURE_ADDR_MIRROR; // Mirror
|
tex->u_mode = SCE_GXM_TEXTURE_ADDR_MIRROR; // Mirror
|
||||||
else if (param == GL_MIRROR_CLAMP_EXT)
|
else if (param == GL_MIRROR_CLAMP_EXT)
|
||||||
tex_unit->u_mode = SCE_GXM_TEXTURE_ADDR_MIRROR_CLAMP; // Mirror Clamp
|
tex->u_mode = SCE_GXM_TEXTURE_ADDR_MIRROR_CLAMP; // Mirror Clamp
|
||||||
sceGxmTextureSetUAddrMode(&tex->gxm_tex, tex_unit->u_mode);
|
sceGxmTextureSetUAddrMode(&tex->gxm_tex, tex->u_mode);
|
||||||
break;
|
break;
|
||||||
case GL_TEXTURE_WRAP_T: // V Mode
|
case GL_TEXTURE_WRAP_T: // V Mode
|
||||||
if (param == GL_CLAMP_TO_EDGE)
|
if (param == GL_CLAMP_TO_EDGE)
|
||||||
tex_unit->v_mode = SCE_GXM_TEXTURE_ADDR_CLAMP; // Clamp
|
tex->v_mode = SCE_GXM_TEXTURE_ADDR_CLAMP; // Clamp
|
||||||
else if (param == GL_REPEAT)
|
else if (param == GL_REPEAT)
|
||||||
tex_unit->v_mode = SCE_GXM_TEXTURE_ADDR_REPEAT; // Repeat
|
tex->v_mode = SCE_GXM_TEXTURE_ADDR_REPEAT; // Repeat
|
||||||
else if (param == GL_MIRRORED_REPEAT)
|
else if (param == GL_MIRRORED_REPEAT)
|
||||||
tex_unit->v_mode = SCE_GXM_TEXTURE_ADDR_MIRROR; // Mirror
|
tex->v_mode = SCE_GXM_TEXTURE_ADDR_MIRROR; // Mirror
|
||||||
else if (param == GL_MIRROR_CLAMP_EXT)
|
else if (param == GL_MIRROR_CLAMP_EXT)
|
||||||
tex_unit->v_mode = SCE_GXM_TEXTURE_ADDR_MIRROR_CLAMP; // Mirror Clamp
|
tex->v_mode = SCE_GXM_TEXTURE_ADDR_MIRROR_CLAMP; // Mirror Clamp
|
||||||
sceGxmTextureSetVAddrMode(&tex->gxm_tex, tex_unit->v_mode);
|
sceGxmTextureSetVAddrMode(&tex->gxm_tex, tex->v_mode);
|
||||||
break;
|
break;
|
||||||
case GL_TEXTURE_LOD_BIAS: // Distant LOD bias
|
case GL_TEXTURE_LOD_BIAS: // Distant LOD bias
|
||||||
tex_unit->lod_bias = (uint32_t)(param + GL_MAX_TEXTURE_LOD_BIAS);
|
tex->lod_bias = (uint32_t)(param + GL_MAX_TEXTURE_LOD_BIAS);
|
||||||
sceGxmTextureSetLodBias(&tex->gxm_tex, tex_unit->lod_bias);
|
sceGxmTextureSetLodBias(&tex->gxm_tex, tex->lod_bias);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
SET_GL_ERROR(GL_INVALID_ENUM)
|
SET_GL_ERROR(GL_INVALID_ENUM)
|
||||||
@ -820,12 +841,12 @@ void glGenerateMipmap(GLenum target) {
|
|||||||
gpu_alloc_mipmaps(-1, tex);
|
gpu_alloc_mipmaps(-1, tex);
|
||||||
|
|
||||||
// Setting texture parameters
|
// Setting texture parameters
|
||||||
sceGxmTextureSetUAddrMode(&tex->gxm_tex, tex_unit->u_mode);
|
sceGxmTextureSetUAddrMode(&tex->gxm_tex, tex->u_mode);
|
||||||
sceGxmTextureSetVAddrMode(&tex->gxm_tex, tex_unit->v_mode);
|
sceGxmTextureSetVAddrMode(&tex->gxm_tex, tex->v_mode);
|
||||||
sceGxmTextureSetMinFilter(&tex->gxm_tex, tex_unit->min_filter);
|
sceGxmTextureSetMinFilter(&tex->gxm_tex, tex->min_filter);
|
||||||
sceGxmTextureSetMagFilter(&tex->gxm_tex, tex_unit->mag_filter);
|
sceGxmTextureSetMagFilter(&tex->gxm_tex, tex->mag_filter);
|
||||||
sceGxmTextureSetMipFilter(&tex->gxm_tex, tex_unit->mip_filter);
|
sceGxmTextureSetMipFilter(&tex->gxm_tex, tex->mip_filter);
|
||||||
sceGxmTextureSetLodBias(&tex->gxm_tex, tex_unit->lod_bias);
|
sceGxmTextureSetLodBias(&tex->gxm_tex, tex->lod_bias);
|
||||||
|
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
|
31
deps/vitaGL/source/utils/gpu_utils.c
vendored
31
deps/vitaGL/source/utils/gpu_utils.c
vendored
@ -81,7 +81,7 @@ void dxt_compress(uint8_t *dst, uint8_t *src, int w, int h, int isdxt5) {
|
|||||||
if (offs_y * 4 >= w)
|
if (offs_y * 4 >= w)
|
||||||
continue;
|
continue;
|
||||||
extract_block(src + offs_y * 16 + offs_x * w * 16, w, block);
|
extract_block(src + offs_y * 16 + offs_x * w * 16, w, block);
|
||||||
stb_compress_dxt_block(dst, block, isdxt5, STB_DXT_HIGHQUAL);
|
stb_compress_dxt_block(dst, block, isdxt5, fast_texture_compression ? STB_DXT_NORMAL : STB_DXT_HIGHQUAL);
|
||||||
dst += isdxt5 ? 16 : 8;
|
dst += isdxt5 ? 16 : 8;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -369,30 +369,31 @@ void gpu_alloc_compressed_texture(uint32_t w, uint32_t h, SceGxmTextureFormat fo
|
|||||||
// Allocating texture data buffer
|
// Allocating texture data buffer
|
||||||
void *texture_data = gpu_alloc_mapped(tex_size, &tex->mtype);
|
void *texture_data = gpu_alloc_mapped(tex_size, &tex->mtype);
|
||||||
|
|
||||||
// NOTE: Supports only GL_RGBA source format for now
|
|
||||||
|
|
||||||
// Initializing texture data buffer
|
// Initializing texture data buffer
|
||||||
if (texture_data != NULL) {
|
if (texture_data != NULL) {
|
||||||
// Initializing texture data buffer
|
|
||||||
if (data != NULL) {
|
if (data != NULL) {
|
||||||
if (read_cb != NULL) {
|
if (read_cb != NULL) {
|
||||||
//void *tmp = malloc(w * h * 4);
|
void *temp = (void *)data;
|
||||||
//void *tmp2 = malloc(tex_size);
|
|
||||||
/*int i, j;
|
// stb_dxt expects input as RGBA8888, so we convert input texture if necessary
|
||||||
|
if (read_cb != readRGBA) {
|
||||||
|
temp = malloc(w * h * 4);
|
||||||
uint8_t *src = (uint8_t *)data;
|
uint8_t *src = (uint8_t *)data;
|
||||||
uint32_t *dst = (uint32_t*)tmp;
|
uint32_t *dst = (uint32_t *)temp;
|
||||||
for (i = 0; i < h * w; i++) {
|
int i;
|
||||||
|
for (i = 0; i < w * h; i++) {
|
||||||
uint32_t clr = read_cb(src);
|
uint32_t clr = read_cb(src);
|
||||||
writeRGBA(dst++, src);
|
writeRGBA(dst++, clr);
|
||||||
src += src_bpp;
|
src += src_bpp;
|
||||||
}*/
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Performing swizzling and DXT compression
|
// Performing swizzling and DXT compression
|
||||||
dxt_compress(texture_data, (void *)data, w, h, alignment == 16);
|
dxt_compress(texture_data, temp, w, h, alignment == 16);
|
||||||
|
|
||||||
//swizzle(texture_data, tmp2, w, h, alignment << 3);
|
// Freeing temporary data if necessary
|
||||||
//free(tmp);
|
if (read_cb != readRGBA)
|
||||||
//free(tmp2);
|
free(temp);
|
||||||
} else {
|
} else {
|
||||||
// Perform swizzling if necessary.
|
// Perform swizzling if necessary.
|
||||||
switch (format) {
|
switch (format) {
|
||||||
|
6
deps/vitaGL/source/utils/gpu_utils.h
vendored
6
deps/vitaGL/source/utils/gpu_utils.h
vendored
@ -40,6 +40,12 @@ typedef struct texture {
|
|||||||
uint8_t valid;
|
uint8_t valid;
|
||||||
uint32_t type;
|
uint32_t type;
|
||||||
void (*write_cb)(void *, uint32_t);
|
void (*write_cb)(void *, uint32_t);
|
||||||
|
SceGxmTextureFilter min_filter;
|
||||||
|
SceGxmTextureFilter mag_filter;
|
||||||
|
SceGxmTextureAddrMode u_mode;
|
||||||
|
SceGxmTextureAddrMode v_mode;
|
||||||
|
SceGxmTextureMipFilter mip_filter;
|
||||||
|
uint32_t lod_bias;
|
||||||
} texture;
|
} texture;
|
||||||
|
|
||||||
// Palette object struct
|
// Palette object struct
|
||||||
|
9
deps/vitaGL/source/vitaGL.c
vendored
9
deps/vitaGL/source/vitaGL.c
vendored
@ -679,12 +679,6 @@ void vglInitWithCustomSizes(uint32_t gpu_pool_size, int width, int height, int r
|
|||||||
texture_units[i].env_mode = MODULATE;
|
texture_units[i].env_mode = MODULATE;
|
||||||
texture_units[i].tex_id = 0;
|
texture_units[i].tex_id = 0;
|
||||||
texture_units[i].enabled = GL_FALSE;
|
texture_units[i].enabled = GL_FALSE;
|
||||||
texture_units[i].min_filter = SCE_GXM_TEXTURE_FILTER_LINEAR;
|
|
||||||
texture_units[i].mag_filter = SCE_GXM_TEXTURE_FILTER_LINEAR;
|
|
||||||
texture_units[i].mip_filter = SCE_GXM_TEXTURE_MIP_FILTER_DISABLED;
|
|
||||||
texture_units[i].u_mode = SCE_GXM_TEXTURE_ADDR_REPEAT;
|
|
||||||
texture_units[i].v_mode = SCE_GXM_TEXTURE_ADDR_REPEAT;
|
|
||||||
texture_units[i].lod_bias = GL_MAX_TEXTURE_LOD_BIAS; // sceGxm range is 0 - (GL_MAX_TEXTURE_LOD_BIAS*2 + 1)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Init texture slots
|
// Init texture slots
|
||||||
@ -711,6 +705,9 @@ void vglInitWithCustomSizes(uint32_t gpu_pool_size, int width, int height, int r
|
|||||||
|
|
||||||
// Mapping newlib heap into sceGxm
|
// Mapping newlib heap into sceGxm
|
||||||
sceGxmMapMemory(addr, _newlib_heap_size, SCE_GXM_MEMORY_ATTRIB_READ | SCE_GXM_MEMORY_ATTRIB_WRITE);
|
sceGxmMapMemory(addr, _newlib_heap_size, SCE_GXM_MEMORY_ATTRIB_READ | SCE_GXM_MEMORY_ATTRIB_WRITE);
|
||||||
|
|
||||||
|
// Allocating default texture object
|
||||||
|
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 8, 8, 0, GL_RGBA, GL_UNSIGNED_BYTE, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
void vglInitExtended(uint32_t gpu_pool_size, int width, int height, int ram_threshold, SceGxmMultisampleMode msaa) {
|
void vglInitExtended(uint32_t gpu_pool_size, int width, int height, int ram_threshold, SceGxmMultisampleMode msaa) {
|
||||||
|
7
deps/vitaGL/source/vitaGL.h
vendored
7
deps/vitaGL/source/vitaGL.h
vendored
@ -127,6 +127,9 @@ extern "C" {
|
|||||||
#define GL_DEPTH_BITS 0x0D56
|
#define GL_DEPTH_BITS 0x0D56
|
||||||
#define GL_STENCIL_BITS 0x0D57
|
#define GL_STENCIL_BITS 0x0D57
|
||||||
#define GL_TEXTURE_2D 0x0DE1
|
#define GL_TEXTURE_2D 0x0DE1
|
||||||
|
#define GL_DONT_CARE 0x1100
|
||||||
|
#define GL_FASTEST 0x1101
|
||||||
|
#define GL_NICEST 0x1102
|
||||||
#define GL_BYTE 0x1400
|
#define GL_BYTE 0x1400
|
||||||
#define GL_UNSIGNED_BYTE 0x1401
|
#define GL_UNSIGNED_BYTE 0x1401
|
||||||
#define GL_SHORT 0x1402
|
#define GL_SHORT 0x1402
|
||||||
@ -238,6 +241,7 @@ extern "C" {
|
|||||||
#define GL_TEXTURE30 0x84DE
|
#define GL_TEXTURE30 0x84DE
|
||||||
#define GL_TEXTURE31 0x84DF
|
#define GL_TEXTURE31 0x84DF
|
||||||
#define GL_ACTIVE_TEXTURE 0x84E0
|
#define GL_ACTIVE_TEXTURE 0x84E0
|
||||||
|
#define GL_TEXTURE_COMPRESSION_HINT 0x84EF
|
||||||
#define GL_TEXTURE_LOD_BIAS 0x8501
|
#define GL_TEXTURE_LOD_BIAS 0x8501
|
||||||
#define GL_INCR_WRAP 0x8507
|
#define GL_INCR_WRAP 0x8507
|
||||||
#define GL_NUM_COMPRESSED_TEXTURE_FORMATS 0x86A2
|
#define GL_NUM_COMPRESSED_TEXTURE_FORMATS 0x86A2
|
||||||
@ -356,6 +360,7 @@ void glGetShaderInfoLog(GLuint handle, GLsizei maxLength, GLsizei *length, GLcha
|
|||||||
void glGetShaderiv(GLuint handle, GLenum pname, GLint *params);
|
void glGetShaderiv(GLuint handle, GLenum pname, GLint *params);
|
||||||
const GLubyte *glGetString(GLenum name);
|
const GLubyte *glGetString(GLenum name);
|
||||||
GLint glGetUniformLocation(GLuint prog, const GLchar *name);
|
GLint glGetUniformLocation(GLuint prog, const GLchar *name);
|
||||||
|
void glHint(GLenum target, GLenum mode);
|
||||||
GLboolean glIsEnabled(GLenum cap);
|
GLboolean glIsEnabled(GLenum cap);
|
||||||
void glLineWidth(GLfloat width);
|
void glLineWidth(GLfloat width);
|
||||||
void glLinkProgram(GLuint progr);
|
void glLinkProgram(GLuint progr);
|
||||||
@ -425,7 +430,7 @@ void vglVertexPointerMapped(const GLvoid *pointer);
|
|||||||
|
|
||||||
// VGL_EXT_gxp_shaders extension implementation
|
// VGL_EXT_gxp_shaders extension implementation
|
||||||
void vglBindAttribLocation(GLuint prog, GLuint index, const GLchar *name, const GLuint num, const GLenum type);
|
void vglBindAttribLocation(GLuint prog, GLuint index, const GLchar *name, const GLuint num, const GLenum type);
|
||||||
void vglBindPackedAttribLocation(GLuint prog, const GLchar *name, const GLuint num, const GLenum type, GLuint offset, GLint stride);
|
GLint vglBindPackedAttribLocation(GLuint prog, const GLchar *name, const GLuint num, const GLenum type, GLuint offset, GLint stride);
|
||||||
void vglVertexAttribPointer(GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, GLuint count, const GLvoid *pointer);
|
void vglVertexAttribPointer(GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, GLuint count, const GLvoid *pointer);
|
||||||
void vglVertexAttribPointerMapped(GLuint index, const GLvoid *pointer);
|
void vglVertexAttribPointerMapped(GLuint index, const GLvoid *pointer);
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user