mirror of
https://github.com/libretro/RetroArch
synced 2025-03-26 20:37:10 +00:00
81403e2751 Fix error requiring HAVE_SHARK to be enabled to build. (#45) 58551e1f52 Added possibility to change runtime shader compiler optimization flags. 77ab50a7b1 Added GL_BGR and GL_BGRA texture formats support. 0ac2793bcf Fix error in texture wrapping options. (#42) 0d2110ac7b Improvements to GL buffer support. (#41) cf86149a85 Added proper compressed texture support. (#40) 8b0a0f735a Unbinded textures and texture units concepts. 1b04851efc Added glUniform2i and glUniform2f implementations. 9a65397ef6 Properly checking for uniform locations existence. 91c557f35d Added support for GL_SHORT attribute types for shaders. 3237fd3fe3 Added vglTexImageDepthBuffer function. f58b3818f2 Typo fix on mag filter setting. ee11f7e1d0 Added vglHasRuntimeShaderCompiler function. 3596242f73 Add PowerVR texture compression (PVRTC) support (#39) 2ae694df4b Added support for mipmaps filtering. af7804b44c Added vglGetGxmTexture implementation. 54b1df4ca2 Removed unused arguments. 7c2ed742ee Allow to call vglBind*Location funcs with wrong param names. 8be84ff698 Fixed RGB565 color conversion. 234ff57f65 Properly setting a single stream with packed attributes. d3b28a5e32 Fix for correct vglBindAttribLocation behaviour. 46e72d3564 Use a single stream for packed attributes. 72a39315e9 Properly dealing with missing attrs in glGetUniformLocation. a6269ce574 Added TEXUNIT1 support for custom shaders. 824d43073e Resetting custom shaders uniforms only when invalidated. d242570161 Minor fix in glShaderSource. bc28bd946d Added glGetShaderInfoLog implementation. git-subtree-dir: deps/vitaGL git-subtree-split: 81403e2751c4dc28cf17cc89a5ab053eb2c5af67
229 lines
5.9 KiB
C
229 lines
5.9 KiB
C
/*
|
|
* This file is part of vitaGL
|
|
* Copyright 2017, 2018, 2019, 2020 Rinnegatamante
|
|
*
|
|
* This program is free software: you can redistribute it and/or modify
|
|
* it under the terms of the GNU Lesser General Public License as published
|
|
* by the Free Software Foundation, version 3 of the License, or (at your
|
|
* option) any later version.
|
|
*
|
|
* This program is distributed in the hope that it will be useful, but
|
|
* WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
* General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU General Public License
|
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
*/
|
|
|
|
/*
|
|
* get_info.c:
|
|
* Implementation for functions returning info to end user
|
|
*/
|
|
|
|
#include "shared.h"
|
|
|
|
// Constants returned by glGetString
|
|
static const GLubyte *vendor = "Rinnegatamante";
|
|
static const GLubyte *renderer = "SGX543MP4+";
|
|
static const GLubyte *version = "VitaGL 1.0";
|
|
static const GLubyte *extensions = "VGL_EXT_gpu_objects_array VGL_EXT_gxp_shaders";
|
|
|
|
/*
|
|
* ------------------------------
|
|
* - IMPLEMENTATION STARTS HERE -
|
|
* ------------------------------
|
|
*/
|
|
|
|
const GLubyte *glGetString(GLenum name) {
|
|
switch (name) {
|
|
case GL_VENDOR: // Vendor
|
|
return vendor;
|
|
break;
|
|
case GL_RENDERER: // Renderer
|
|
return renderer;
|
|
break;
|
|
case GL_VERSION: // openGL Version
|
|
return version;
|
|
break;
|
|
case GL_EXTENSIONS: // Supported extensions
|
|
return extensions;
|
|
break;
|
|
default:
|
|
vgl_error = GL_INVALID_ENUM;
|
|
return NULL;
|
|
break;
|
|
}
|
|
}
|
|
|
|
void glGetBooleanv(GLenum pname, GLboolean *params) {
|
|
switch (pname) {
|
|
case GL_BLEND: // Blending feature state
|
|
*params = blend_state;
|
|
break;
|
|
case GL_BLEND_DST_ALPHA: // Blend Alpha Factor for Destination
|
|
*params = (blend_dfactor_a == SCE_GXM_BLEND_FACTOR_ZERO) ? GL_FALSE : GL_TRUE;
|
|
break;
|
|
case GL_BLEND_DST_RGB: // Blend RGB Factor for Destination
|
|
*params = (blend_dfactor_rgb == SCE_GXM_BLEND_FACTOR_ZERO) ? GL_FALSE : GL_TRUE;
|
|
break;
|
|
case GL_BLEND_SRC_ALPHA: // Blend Alpha Factor for Source
|
|
*params = (blend_sfactor_a == SCE_GXM_BLEND_FACTOR_ZERO) ? GL_FALSE : GL_TRUE;
|
|
break;
|
|
case GL_BLEND_SRC_RGB: // Blend RGB Factor for Source
|
|
*params = (blend_sfactor_rgb == SCE_GXM_BLEND_FACTOR_ZERO) ? GL_FALSE : GL_TRUE;
|
|
break;
|
|
case GL_DEPTH_TEST: // Depth test state
|
|
*params = depth_test_state;
|
|
break;
|
|
case GL_ACTIVE_TEXTURE: // Active texture
|
|
*params = GL_FALSE;
|
|
break;
|
|
default:
|
|
SET_GL_ERROR(GL_INVALID_ENUM)
|
|
break;
|
|
}
|
|
}
|
|
|
|
void glGetFloatv(GLenum pname, GLfloat *data) {
|
|
int i, j;
|
|
switch (pname) {
|
|
case GL_POLYGON_OFFSET_FACTOR: // Polygon offset factor
|
|
*data = pol_factor;
|
|
break;
|
|
case GL_POLYGON_OFFSET_UNITS: // Polygon offset units
|
|
*data = pol_units;
|
|
break;
|
|
case GL_MODELVIEW_MATRIX: // Modelview matrix
|
|
// Since we use column-major matrices internally, wee need to transpose it before returning it to the application
|
|
for (i = 0; i < 4; i++) {
|
|
for (j = 0; j < 4; j++) {
|
|
data[i * 4 + j] = modelview_matrix[j][i];
|
|
}
|
|
}
|
|
break;
|
|
case GL_PROJECTION_MATRIX: // Projection matrix
|
|
// Since we use column-major matrices internally, wee need to transpose it before returning it to the application
|
|
for (i = 0; i < 4; i++) {
|
|
for (j = 0; j < 4; j++) {
|
|
data[i * 4 + j] = projection_matrix[j][i];
|
|
}
|
|
}
|
|
break;
|
|
case GL_ACTIVE_TEXTURE: // Active texture
|
|
*data = (1.0f * (server_texture_unit + GL_TEXTURE0));
|
|
break;
|
|
case GL_MAX_MODELVIEW_STACK_DEPTH: // Max modelview stack depth
|
|
*data = MODELVIEW_STACK_DEPTH;
|
|
break;
|
|
case GL_MAX_PROJECTION_STACK_DEPTH: // Max projection stack depth
|
|
*data = GENERIC_STACK_DEPTH;
|
|
break;
|
|
case GL_MAX_TEXTURE_STACK_DEPTH: // Max texture stack depth
|
|
*data = GENERIC_STACK_DEPTH;
|
|
break;
|
|
case GL_DEPTH_BITS:
|
|
*data = 32;
|
|
break;
|
|
case GL_STENCIL_BITS:
|
|
*data = 8;
|
|
break;
|
|
default:
|
|
SET_GL_ERROR(GL_INVALID_ENUM)
|
|
break;
|
|
}
|
|
}
|
|
|
|
void glGetIntegerv(GLenum pname, GLint *data) {
|
|
// Aliasing to make code more readable
|
|
texture_unit *server_tex_unit = &texture_units[server_texture_unit];
|
|
|
|
switch (pname) {
|
|
case GL_POLYGON_MODE:
|
|
data[0] = gl_polygon_mode_front;
|
|
data[1] = gl_polygon_mode_back;
|
|
break;
|
|
case GL_SCISSOR_BOX:
|
|
data[0] = region.x;
|
|
data[1] = region.y;
|
|
data[2] = region.w;
|
|
data[3] = region.h;
|
|
break;
|
|
case GL_TEXTURE_BINDING_2D:
|
|
*data = server_tex_unit->tex_id;
|
|
break;
|
|
case GL_MAX_TEXTURE_SIZE:
|
|
*data = 1024;
|
|
break;
|
|
case GL_VIEWPORT:
|
|
data[0] = gl_viewport.x;
|
|
data[1] = gl_viewport.y;
|
|
data[2] = gl_viewport.w;
|
|
data[3] = gl_viewport.h;
|
|
break;
|
|
case GL_DEPTH_BITS:
|
|
data[0] = 32;
|
|
break;
|
|
case GL_STENCIL_BITS:
|
|
data[0] = 8;
|
|
break;
|
|
case GL_NUM_COMPRESSED_TEXTURE_FORMATS:
|
|
*data = COMPRESSED_TEXTURE_FORMATS_NUM;
|
|
break;
|
|
case GL_COMPRESSED_TEXTURE_FORMATS:
|
|
data[0] = GL_COMPRESSED_RGB_S3TC_DXT1_EXT;
|
|
data[1] = GL_COMPRESSED_RGBA_S3TC_DXT1_EXT;
|
|
data[2] = GL_COMPRESSED_RGBA_S3TC_DXT5_EXT;
|
|
data[3] = GL_COMPRESSED_RGB_PVRTC_4BPPV1_IMG;
|
|
data[4] = GL_COMPRESSED_RGB_PVRTC_2BPPV1_IMG;
|
|
data[5] = GL_COMPRESSED_RGBA_PVRTC_4BPPV1_IMG;
|
|
data[6] = GL_COMPRESSED_RGBA_PVRTC_2BPPV1_IMG;
|
|
data[7] = GL_COMPRESSED_RGBA_PVRTC_2BPPV2_IMG;
|
|
data[8] = GL_COMPRESSED_RGBA_PVRTC_4BPPV2_IMG;
|
|
break;
|
|
default:
|
|
SET_GL_ERROR(GL_INVALID_ENUM)
|
|
break;
|
|
}
|
|
}
|
|
|
|
GLboolean glIsEnabled(GLenum cap) {
|
|
GLboolean ret = GL_FALSE;
|
|
switch (cap) {
|
|
case GL_DEPTH_TEST:
|
|
ret = depth_test_state;
|
|
break;
|
|
case GL_STENCIL_TEST:
|
|
ret = stencil_test_state;
|
|
break;
|
|
case GL_BLEND:
|
|
ret = blend_state;
|
|
break;
|
|
case GL_SCISSOR_TEST:
|
|
ret = scissor_test_state;
|
|
break;
|
|
case GL_CULL_FACE:
|
|
ret = cull_face_state;
|
|
break;
|
|
case GL_POLYGON_OFFSET_FILL:
|
|
ret = pol_offset_fill;
|
|
break;
|
|
case GL_POLYGON_OFFSET_LINE:
|
|
ret = pol_offset_line;
|
|
break;
|
|
case GL_POLYGON_OFFSET_POINT:
|
|
ret = pol_offset_point;
|
|
break;
|
|
default:
|
|
vgl_error = GL_INVALID_ENUM;
|
|
break;
|
|
}
|
|
return ret;
|
|
}
|
|
|
|
GLenum glGetError(void) {
|
|
GLenum ret = vgl_error;
|
|
vgl_error = GL_NO_ERROR;
|
|
return ret;
|
|
}
|