Style nits

This commit is contained in:
twinaphex 2016-02-14 16:59:21 +01:00
parent cbf84b8d6e
commit 57c4db4338

View File

@ -215,11 +215,16 @@ static bool gl_check_fbo_proc(gl_t *gl)
if (!gl->core_context && !gl_query_extension(gl, "ARB_framebuffer_object")) if (!gl->core_context && !gl_query_extension(gl, "ARB_framebuffer_object"))
return false; return false;
return glGenFramebuffers && glBindFramebuffer && glFramebufferTexture2D && return glGenFramebuffers
glCheckFramebufferStatus && glDeleteFramebuffers && && glBindFramebuffer
glGenRenderbuffers && glBindRenderbuffer && && glFramebufferTexture2D
glFramebufferRenderbuffer && glRenderbufferStorage && && glCheckFramebufferStatus
glDeleteRenderbuffers; && glDeleteFramebuffers
&& glGenRenderbuffers
&& glBindRenderbuffer
&& glFramebufferRenderbuffer
&& glRenderbufferStorage
&& glDeleteRenderbuffers;
} }
#else #else
#define gl_check_fbo_proc(gl) (true) #define gl_check_fbo_proc(gl) (true)
@ -234,9 +239,8 @@ static bool gl_shader_init(gl_t *gl)
bool ret = false; bool ret = false;
const shader_backend_t *backend = NULL; const shader_backend_t *backend = NULL;
settings_t *settings = config_get_ptr(); settings_t *settings = config_get_ptr();
const char *shader_path = (settings->video.shader_enable && *settings->video.shader_path) ? const char *shader_path = (settings->video.shader_enable
settings->video.shader_path : NULL; && *settings->video.shader_path) ? settings->video.shader_path : NULL;
if (!gl) if (!gl)
{ {
@ -349,7 +353,8 @@ static INLINE GLenum min_filter_to_mag(GLenum type)
* When width/height changes or window sizes change, * When width/height changes or window sizes change,
* we have to recalculate geometry of our FBO. */ * we have to recalculate geometry of our FBO. */
static void gl_compute_fbo_geometry(gl_t *gl, unsigned width, unsigned height, static void gl_compute_fbo_geometry(gl_t *gl,
unsigned width, unsigned height,
unsigned vp_width, unsigned vp_height) unsigned vp_width, unsigned vp_height)
{ {
int i; int i;
@ -376,11 +381,13 @@ static void gl_compute_fbo_geometry(gl_t *gl, unsigned width, unsigned height,
break; break;
case RARCH_SCALE_ABSOLUTE: case RARCH_SCALE_ABSOLUTE:
fbo_rect->img_width = fbo_rect->max_img_width = fbo_scale->abs_x; fbo_rect->img_width = fbo_rect->max_img_width =
fbo_scale->abs_x;
break; break;
case RARCH_SCALE_VIEWPORT: case RARCH_SCALE_VIEWPORT:
fbo_rect->img_width = fbo_rect->max_img_width = fbo_scale->scale_x * vp_width; fbo_rect->img_width = fbo_rect->max_img_width =
fbo_scale->scale_x * vp_width;
break; break;
} }
@ -392,11 +399,13 @@ static void gl_compute_fbo_geometry(gl_t *gl, unsigned width, unsigned height,
break; break;
case RARCH_SCALE_ABSOLUTE: case RARCH_SCALE_ABSOLUTE:
fbo_rect->img_height = fbo_rect->max_img_height = fbo_scale->abs_y; fbo_rect->img_height = fbo_scale->abs_y;
fbo_rect->max_img_height = fbo_scale->abs_y;
break; break;
case RARCH_SCALE_VIEWPORT: case RARCH_SCALE_VIEWPORT:
fbo_rect->img_height = fbo_rect->max_img_height = fbo_scale->scale_y * vp_height; fbo_rect->img_height = fbo_rect->max_img_height =
fbo_scale->scale_y * vp_height;
break; break;
} }
@ -550,7 +559,8 @@ static void gl_create_fbo_textures(gl_t *gl)
if (gl->fbo_feedback_enable) if (gl->fbo_feedback_enable)
{ {
glGenTextures(1, &gl->fbo_feedback_texture); glGenTextures(1, &gl->fbo_feedback_texture);
gl_create_fbo_texture(gl, gl->fbo_feedback_pass, gl->fbo_feedback_texture); gl_create_fbo_texture(gl,
gl->fbo_feedback_pass, gl->fbo_feedback_texture);
} }
glBindTexture(GL_TEXTURE_2D, 0); glBindTexture(GL_TEXTURE_2D, 0);
@ -583,13 +593,15 @@ static bool gl_create_fbo_targets(gl_t *gl)
glGenFramebuffers(1, &gl->fbo_feedback); glGenFramebuffers(1, &gl->fbo_feedback);
glBindFramebuffer(RARCH_GL_FRAMEBUFFER, gl->fbo_feedback); glBindFramebuffer(RARCH_GL_FRAMEBUFFER, gl->fbo_feedback);
glFramebufferTexture2D(RARCH_GL_FRAMEBUFFER, glFramebufferTexture2D(RARCH_GL_FRAMEBUFFER,
RARCH_GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, gl->fbo_feedback_texture, 0); RARCH_GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D,
gl->fbo_feedback_texture, 0);
status = glCheckFramebufferStatus(RARCH_GL_FRAMEBUFFER); status = glCheckFramebufferStatus(RARCH_GL_FRAMEBUFFER);
if (status != RARCH_GL_FRAMEBUFFER_COMPLETE) if (status != RARCH_GL_FRAMEBUFFER_COMPLETE)
goto error; goto error;
/* Make sure the feedback textures are cleared so we don't feedback noise. */ /* Make sure the feedback textures are cleared
* so we don't feedback noise. */
glClearColor(0.0f, 0.0f, 0.0f, 0.0f); glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
glClear(GL_COLOR_BUFFER_BIT); glClear(GL_COLOR_BUFFER_BIT);
} }
@ -690,12 +702,15 @@ static void gl_init_fbo(gl_t *gl, unsigned fbo_width, unsigned fbo_height)
gl->fbo_rect[i].width, gl->fbo_rect[i].height); gl->fbo_rect[i].width, gl->fbo_rect[i].height);
} }
gl->fbo_feedback_enable = video_shader_driver_get_feedback_pass(&gl->fbo_feedback_pass); gl->fbo_feedback_enable =
video_shader_driver_get_feedback_pass(&gl->fbo_feedback_pass);
if (gl->fbo_feedback_enable && gl->fbo_feedback_pass < (unsigned)gl->fbo_pass) if (gl->fbo_feedback_enable && gl->fbo_feedback_pass
< (unsigned)gl->fbo_pass)
{ {
RARCH_LOG("[GL]: Creating feedback FBO %d @ %ux%u\n", i, RARCH_LOG("[GL]: Creating feedback FBO %d @ %ux%u\n", i,
gl->fbo_rect[gl->fbo_feedback_pass].width, gl->fbo_rect[gl->fbo_feedback_pass].height); gl->fbo_rect[gl->fbo_feedback_pass].width,
gl->fbo_rect[gl->fbo_feedback_pass].height);
} }
else if (gl->fbo_feedback_enable) else if (gl->fbo_feedback_enable)
{ {
@ -827,7 +842,8 @@ static bool gl_init_hw_render(gl_t *gl, unsigned width, unsigned height)
} }
#endif #endif
static void gl_set_projection(gl_t *gl, struct gfx_ortho *ortho, bool allow_rotate) static void gl_set_projection(gl_t *gl,
struct gfx_ortho *ortho, bool allow_rotate)
{ {
math_matrix_4x4 rot; math_matrix_4x4 rot;
@ -991,7 +1007,8 @@ static INLINE void gl_start_frame_fbo(gl_t *gl)
#endif #endif
} }
static void gl_check_fbo_dimension(gl_t *gl, unsigned i, GLuint fbo, GLuint texture, bool update_feedback) static void gl_check_fbo_dimension(gl_t *gl, unsigned i,
GLuint fbo, GLuint texture, bool update_feedback)
{ {
GLenum status; GLenum status;
unsigned img_width, img_height, max, pow2_size; unsigned img_width, img_height, max, pow2_size;
@ -1037,7 +1054,8 @@ static void gl_check_fbo_dimension(gl_t *gl, unsigned i, GLuint fbo, GLuint text
RARCH_WARN("Failed to reinitialize FBO texture.\n"); RARCH_WARN("Failed to reinitialize FBO texture.\n");
} }
/* Update feedback texture in-place so we avoid having to juggle two different fbo_rect structs since they get updated here. */ /* Update feedback texture in-place so we avoid having to
* juggle two different fbo_rect structs since they get updated here. */
if (update_feedback) if (update_feedback)
{ {
glBindFramebuffer(RARCH_GL_FRAMEBUFFER, gl->fbo_feedback); glBindFramebuffer(RARCH_GL_FRAMEBUFFER, gl->fbo_feedback);
@ -1055,14 +1073,18 @@ static void gl_check_fbo_dimension(gl_t *gl, unsigned i, GLuint fbo, GLuint text
gl->fbo_feedback_texture, 0); gl->fbo_feedback_texture, 0);
status = glCheckFramebufferStatus(RARCH_GL_FRAMEBUFFER); status = glCheckFramebufferStatus(RARCH_GL_FRAMEBUFFER);
if (status != RARCH_GL_FRAMEBUFFER_COMPLETE)
RARCH_WARN("Failed to reinitialize FBO texture.\n"); if (status == RARCH_GL_FRAMEBUFFER_COMPLETE)
else
{ {
/* Make sure the feedback textures are cleared so we don't feedback noise. */ /* Make sure the feedback textures are cleared
* so we don't feedback noise. */
glClearColor(0.0f, 0.0f, 0.0f, 0.0f); glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
glClear(GL_COLOR_BUFFER_BIT); glClear(GL_COLOR_BUFFER_BIT);
} }
else
{
RARCH_WARN("Failed to reinitialize FBO texture.\n");
}
} }
RARCH_LOG("[GL]: Recreating FBO texture #%d: %ux%u\n", RARCH_LOG("[GL]: Recreating FBO texture #%d: %ux%u\n",
@ -1079,13 +1101,16 @@ static void gl_check_fbo_dimensions(gl_t *gl)
/* Check if we have to recreate our FBO textures. */ /* Check if we have to recreate our FBO textures. */
for (i = 0; i < gl->fbo_pass; i++) for (i = 0; i < gl->fbo_pass; i++)
{ {
bool update_feedback = gl->fbo_feedback_enable && (unsigned)i == gl->fbo_feedback_pass; bool update_feedback = gl->fbo_feedback_enable
gl_check_fbo_dimension(gl, i, gl->fbo[i], gl->fbo_texture[i], update_feedback); && (unsigned)i == gl->fbo_feedback_pass;
gl_check_fbo_dimension(gl, i, gl->fbo[i],
gl->fbo_texture[i], update_feedback);
} }
} }
static void gl_frame_fbo(gl_t *gl, uint64_t frame_count, static void gl_frame_fbo(gl_t *gl, uint64_t frame_count,
const struct gfx_tex_info *tex_info, const struct gfx_tex_info *feedback_info) const struct gfx_tex_info *tex_info,
const struct gfx_tex_info *feedback_info)
{ {
unsigned width, height; unsigned width, height;
const struct gfx_fbo_rect *prev_rect; const struct gfx_fbo_rect *prev_rect;
@ -1135,10 +1160,12 @@ static void gl_frame_fbo(gl_t *gl, uint64_t frame_count,
/* Render to FBO with certain size. */ /* Render to FBO with certain size. */
gl_set_viewport(gl, rect->img_width, rect->img_height, true, false); gl_set_viewport(gl, rect->img_width, rect->img_height, true, false);
video_shader_driver_set_params(gl, prev_rect->img_width, prev_rect->img_height, video_shader_driver_set_params(gl,
prev_rect->img_width, prev_rect->img_height,
prev_rect->width, prev_rect->height, prev_rect->width, prev_rect->height,
gl->vp.width, gl->vp.height, (unsigned int)frame_count, gl->vp.width, gl->vp.height, (unsigned int)frame_count,
tex_info, gl->prev_info, feedback_info, fbo_tex_info, fbo_tex_info_cnt); tex_info, gl->prev_info, feedback_info, fbo_tex_info,
fbo_tex_info_cnt);
gl->coords.vertices = 4; gl->coords.vertices = 4;
video_shader_driver_set_coords(NULL, &gl->coords); video_shader_driver_set_coords(NULL, &gl->coords);
@ -1185,7 +1212,8 @@ static void gl_frame_fbo(gl_t *gl, uint64_t frame_count,
prev_rect->img_width, prev_rect->img_height, prev_rect->img_width, prev_rect->img_height,
prev_rect->width, prev_rect->height, prev_rect->width, prev_rect->height,
gl->vp.width, gl->vp.height, (unsigned int)frame_count, gl->vp.width, gl->vp.height, (unsigned int)frame_count,
tex_info, gl->prev_info, feedback_info, fbo_tex_info, fbo_tex_info_cnt); tex_info, gl->prev_info, feedback_info, fbo_tex_info,
fbo_tex_info_cnt);
gl->coords.vertex = gl->vertex_ptr; gl->coords.vertex = gl->vertex_ptr;
@ -1365,7 +1393,8 @@ static void gl_init_textures(gl_t *gl, const video_info_t *video)
glBindBuffer(GL_TEXTURE_REFERENCE_BUFFER_SCE, gl->pbo); glBindBuffer(GL_TEXTURE_REFERENCE_BUFFER_SCE, gl->pbo);
glBufferData(GL_TEXTURE_REFERENCE_BUFFER_SCE, glBufferData(GL_TEXTURE_REFERENCE_BUFFER_SCE,
gl->tex_w * gl->tex_h * gl->base_size * gl->textures, NULL, GL_STREAM_DRAW); gl->tex_w * gl->tex_h * gl->base_size * gl->textures,
NULL, GL_STREAM_DRAW);
#endif #endif
internal_fmt = gl->internal_fmt; internal_fmt = gl->internal_fmt;
@ -1448,7 +1477,8 @@ static INLINE void gl_copy_frame(gl_t *gl, const void *frame,
{ {
bool use_rgba = video_driver_ctl(RARCH_DISPLAY_CTL_SUPPORTS_RGBA, NULL); bool use_rgba = video_driver_ctl(RARCH_DISPLAY_CTL_SUPPORTS_RGBA, NULL);
glPixelStorei(GL_UNPACK_ALIGNMENT, video_pixel_get_alignment(width * gl->base_size)); glPixelStorei(GL_UNPACK_ALIGNMENT,
video_pixel_get_alignment(width * gl->base_size));
/* Fallback for GLES devices without GL_BGRA_EXT. */ /* Fallback for GLES devices without GL_BGRA_EXT. */
if (gl->base_size == 4 && use_rgba) if (gl->base_size == 4 && use_rgba)
@ -1499,7 +1529,8 @@ static INLINE void gl_copy_frame(gl_t *gl, const void *frame,
#elif defined(HAVE_PSGL) #elif defined(HAVE_PSGL)
{ {
unsigned h; unsigned h;
size_t buffer_addr = gl->tex_w * gl->tex_h * gl->tex_index * gl->base_size; size_t buffer_addr = gl->tex_w * gl->tex_h *
gl->tex_index * gl->base_size;
size_t buffer_stride = gl->tex_w * gl->base_size; size_t buffer_stride = gl->tex_w * gl->base_size;
const uint8_t *frame_copy = frame; const uint8_t *frame_copy = frame;
size_t frame_copy_size = width * gl->base_size; size_t frame_copy_size = width * gl->base_size;
@ -1545,7 +1576,8 @@ static INLINE void gl_set_prev_texture(gl_t *gl,
sizeof(*tex_info)); sizeof(*tex_info));
#ifdef HAVE_FBO #ifdef HAVE_FBO
/* Implement feedback by swapping out FBO/textures for FBO pass #N and feedbacks. */ /* Implement feedback by swapping out FBO/textures
* for FBO pass #N and feedbacks. */
if (gl->fbo_feedback_enable) if (gl->fbo_feedback_enable)
{ {
GLuint tmp_fbo = gl->fbo_feedback; GLuint tmp_fbo = gl->fbo_feedback;
@ -2230,7 +2262,8 @@ static INLINE void gl_set_texture_fmts(gl_t *gl, bool rgb32)
if (rgb32) if (rgb32)
{ {
bool use_rgba = video_driver_ctl(RARCH_DISPLAY_CTL_SUPPORTS_RGBA, NULL); bool use_rgba =
video_driver_ctl(RARCH_DISPLAY_CTL_SUPPORTS_RGBA, NULL);
gl->internal_fmt = RARCH_GL_INTERNAL_FORMAT32; gl->internal_fmt = RARCH_GL_INTERNAL_FORMAT32;
gl->texture_type = RARCH_GL_TEXTURE_TYPE32; gl->texture_type = RARCH_GL_TEXTURE_TYPE32;
@ -2249,7 +2282,7 @@ static INLINE void gl_set_texture_fmts(gl_t *gl, bool rgb32)
RARCH_LOG("[GL]: Using GL_RGB565 for texture uploads.\n"); RARCH_LOG("[GL]: Using GL_RGB565 for texture uploads.\n");
gl->internal_fmt = RARCH_GL_INTERNAL_FORMAT16_565; gl->internal_fmt = RARCH_GL_INTERNAL_FORMAT16_565;
gl->texture_type = RARCH_GL_TEXTURE_TYPE16_565; gl->texture_type = RARCH_GL_TEXTURE_TYPE16_565;
gl->texture_fmt = RARCH_GL_FORMAT16_565; gl->texture_fmt = RARCH_GL_FORMAT16_565;
} }
#endif #endif
} }
@ -2589,7 +2622,8 @@ static void *gl_init(const video_info_t *video, const input_driver_t **input, vo
} }
hw_render = video_driver_callback(); hw_render = video_driver_callback();
gl->vertex_ptr = hw_render->bottom_left_origin ? vertexes : vertexes_flipped; gl->vertex_ptr = hw_render->bottom_left_origin
? vertexes : vertexes_flipped;
/* Better pipelining with GPU due to synchronous glSubTexImage. /* Better pipelining with GPU due to synchronous glSubTexImage.
* Multiple async PBOs would be an alternative, * Multiple async PBOs would be an alternative,
@ -2622,7 +2656,8 @@ static void *gl_init(const video_info_t *video, const input_driver_t **input, vo
if (!video_shader_driver_init_first()) if (!video_shader_driver_init_first())
goto error; goto error;
RARCH_LOG("[GL]: Default shader backend found: %s.\n", video_shader_driver_get_ident()); RARCH_LOG("[GL]: Default shader backend found: %s.\n",
video_shader_driver_get_ident());
if (!gl_shader_init(gl)) if (!gl_shader_init(gl))
{ {
@ -2636,7 +2671,8 @@ static void *gl_init(const video_info_t *video, const input_driver_t **input, vo
} }
RARCH_LOG("[GL]: Using %u textures.\n", gl->textures); RARCH_LOG("[GL]: Using %u textures.\n", gl->textures);
RARCH_LOG("[GL]: Loaded %u program(s).\n", video_shader_driver_num_shaders()); RARCH_LOG("[GL]: Loaded %u program(s).\n",
video_shader_driver_num_shaders());
gl->tex_w = gl->tex_h = (RARCH_SCALE_BASE * video->input_scale); gl->tex_w = gl->tex_h = (RARCH_SCALE_BASE * video->input_scale);
gl->keep_aspect = video->force_aspect; gl->keep_aspect = video->force_aspect;
@ -2795,7 +2831,8 @@ static void gl_update_tex_filter_frame(gl_t *gl)
if (!video_shader_driver_filter_type(1, &smooth)) if (!video_shader_driver_filter_type(1, &smooth))
smooth = settings->video.smooth; smooth = settings->video.smooth;
wrap_mode = gl_wrap_type_to_enum(video_shader_driver_wrap_type(1)); wrap_mode =
gl_wrap_type_to_enum(video_shader_driver_wrap_type(1));
gl->tex_mipmap = video_shader_driver_mipmap_input(1); gl->tex_mipmap = video_shader_driver_mipmap_input(1);
gl->video_info.smooth = smooth; gl->video_info.smooth = smooth;
@ -2979,7 +3016,8 @@ static bool gl_read_viewport(void *data, uint8_t *buffer)
goto error; goto error;
gl->pbo_readback_valid[gl->pbo_readback_index] = false; gl->pbo_readback_valid[gl->pbo_readback_index] = false;
glBindBuffer(GL_PIXEL_PACK_BUFFER, gl->pbo_readback[gl->pbo_readback_index]); glBindBuffer(GL_PIXEL_PACK_BUFFER,
gl->pbo_readback[gl->pbo_readback_index]);
#ifdef HAVE_OPENGLES3 #ifdef HAVE_OPENGLES3
/* Slower path, but should work on all implementations at least. */ /* Slower path, but should work on all implementations at least. */
num_pixels = gl->vp.width * gl->vp.height; num_pixels = gl->vp.width * gl->vp.height;
@ -3018,7 +3056,8 @@ static bool gl_read_viewport(void *data, uint8_t *buffer)
glUnmapBuffer(GL_PIXEL_PACK_BUFFER); glUnmapBuffer(GL_PIXEL_PACK_BUFFER);
glBindBuffer(GL_PIXEL_PACK_BUFFER, 0); glBindBuffer(GL_PIXEL_PACK_BUFFER, 0);
} }
else /* Use slow synchronous readbacks. Use this with plain screenshots as we don't really care about performance in this case. */ else /* Use slow synchronous readbacks. Use this with plain screenshots
as we don't really care about performance in this case. */
#endif #endif
{ {
unsigned i; unsigned i;
@ -3107,7 +3146,8 @@ unsigned *height_p, size_t *pitch_p)
} }
glBindTexture(GL_TEXTURE_2D, gl->texture[gl->tex_index]); glBindTexture(GL_TEXTURE_2D, gl->texture[gl->tex_index]);
glGetTexImage(GL_TEXTURE_2D, 0,gl->texture_type, gl->texture_fmt, buffer_texture); glGetTexImage(GL_TEXTURE_2D, 0,
gl->texture_type, gl->texture_fmt, buffer_texture);
*width_p = width; *width_p = width;
*height_p = height; *height_p = height;
@ -3154,11 +3194,16 @@ static bool gl_overlay_load(void *data,
return false; return false;
} }
gl->overlay_vertex_coord = (GLfloat*)calloc(2 * 4 * num_images, sizeof(GLfloat)); gl->overlay_vertex_coord = (GLfloat*)
gl->overlay_tex_coord = (GLfloat*)calloc(2 * 4 * num_images, sizeof(GLfloat)); calloc(2 * 4 * num_images, sizeof(GLfloat));
gl->overlay_color_coord = (GLfloat*)calloc(4 * 4 * num_images, sizeof(GLfloat)); gl->overlay_tex_coord = (GLfloat*)
calloc(2 * 4 * num_images, sizeof(GLfloat));
gl->overlay_color_coord = (GLfloat*)
calloc(4 * 4 * num_images, sizeof(GLfloat));
if (!gl->overlay_vertex_coord || !gl->overlay_tex_coord || !gl->overlay_color_coord) if ( !gl->overlay_vertex_coord
|| !gl->overlay_tex_coord
|| !gl->overlay_color_coord)
return false; return false;
gl->overlays = num_images; gl->overlays = num_images;
@ -3391,7 +3436,8 @@ static void gl_set_aspect_ratio(void *data, unsigned aspect_ratio_idx)
if (cmd != RARCH_DISPLAY_CTL_NONE) if (cmd != RARCH_DISPLAY_CTL_NONE)
video_driver_ctl(cmd, NULL); video_driver_ctl(cmd, NULL);
video_driver_set_aspect_ratio_value(aspectratio_lut[aspect_ratio_idx].value); video_driver_set_aspect_ratio_value(
aspectratio_lut[aspect_ratio_idx].value);
if (!gl) if (!gl)
return; return;
@ -3569,7 +3615,8 @@ static int video_texture_load_wrap_gl_mipmap(void *data)
if (!data) if (!data)
return 0; return 0;
video_texture_load_gl((struct texture_image*)data, TEXTURE_FILTER_MIPMAP_LINEAR, &id); video_texture_load_gl((struct texture_image*)data,
TEXTURE_FILTER_MIPMAP_LINEAR, &id);
return id; return id;
} }
@ -3579,7 +3626,8 @@ static int video_texture_load_wrap_gl(void *data)
if (!data) if (!data)
return 0; return 0;
video_texture_load_gl((struct texture_image*)data, TEXTURE_FILTER_LINEAR, &id); video_texture_load_gl((struct texture_image*)data,
TEXTURE_FILTER_LINEAR, &id);
return id; return id;
} }