/*
* GPAC - Multimedia Framework C SDK
*
* Authors: Jean Le Feuvre
* Copyright (c) Telecom ParisTech 2000-2012
* All rights reserved
*
* This file is part of GPAC / Scene Compositor sub-project
*
* GPAC 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; either version 2, or (at your option)
* any later version.
*
* GPAC 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 Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; see the file COPYING. If not, write to
* the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
*
*/
#ifndef _TEXTURING_H_
#define _TEXTURING_H_
#include <gpac/internal/compositor_dev.h>
#ifdef __cplusplus
extern "C" {
#endif
/*allocates the HW specific texture handle(s) (potentially both raster and OpenGL handlers)*/
GF_Err gf_sc_texture_allocate(GF_TextureHandler *txh);
/*releases the hardware handle(s) and all associated system resources*/
void gf_sc_texture_release(GF_TextureHandler *txh);
/*signals new data is available in the texture interface*/
GF_Err gf_sc_texture_set_data(GF_TextureHandler *hdl);
/*reset the hardware handle(s) only, but keep associated resources for later hardware bind*/
void gf_sc_texture_reset(GF_TextureHandler *hdl);
/*push data to hardware if needed, creating the hardware handle(s)*/
Bool gf_sc_texture_push_image(GF_TextureHandler *txh, Bool generate_mipmaps, Bool for2d);
/*refreshes hardware data for given rect (eg glTexSubImage)*/
void gf_sc_texture_refresh_area(GF_TextureHandler *, GF_IRect *rc, void *mem);
/*gets texture transform matrix - returns 1 if not identity
@tx_transform: texture transform node from appearance*/
Bool gf_sc_texture_get_transform(GF_TextureHandler *txh, GF_Node *tx_transform, GF_Matrix *mx, Bool for_picking);
/*gets the associated raster2D stencil handler*/
GF_STENCIL gf_sc_texture_get_stencil(GF_TextureHandler *hdl);
/*sets the associated raster2D stencil handler (used by gradients)*/
void gf_sc_texture_set_stencil(GF_TextureHandler *hdl, GF_STENCIL stencil);
Bool gf_sc_texture_is_transparent(GF_TextureHandler *txh);
void gf_sc_texture_check_pause_on_first_load(GF_TextureHandler *txh);
/* configures conversion parameters and allocates the conv data buffer*/
GF_Err gf_sc_texture_configure_conversion(GF_TextureHandler *txh);
/*ALL THE FOLLOWING ARE ONLY AVAILABLE IN 3D AND DEAL WITH OPENGL TEXTURE MANAGEMENT*/
#ifndef GPAC_DISABLE_3D
/*enable the texture and pushes the given texture transform on the graphics card*/
u32 gf_sc_texture_enable(GF_TextureHandler *txh, GF_Node *tx_transform);
/*same as gf_sc_texture_enable, but provides object bounds for correct mapping of svg gradients in UserSpaceMode*/
u32 gf_sc_texture_enable_ex(GF_TextureHandler *txh, GF_Node *tx_transform, GF_Rect *bounds);
/*disables the texture (unbinds it)*/
void gf_sc_texture_disable(GF_TextureHandler *txh);
/*retrieves the internal (potentially converted for YUV) data buffer*/
char *gf_sc_texture_get_data(GF_TextureHandler *txh, u32 *pix_format);
/*checks if the data buffer shall be pushed to graphics card*/
Bool gf_sc_texture_needs_reload(GF_TextureHandler *hdl);
#ifndef GPAC_USE_TINYGL
/*copy current GL window to the texture - the viewport used is the texture one (0,0,W,H) */
void gf_sc_copy_to_texture(GF_TextureHandler *txh);
#endif
Bool gf_sc_texture_convert(GF_TextureHandler *txh);
/*copy current GL window to the associated data buffer - the viewport used is the texture one (0,0,W,H) */
void gf_sc_copy_to_stencil(GF_TextureHandler *txh);
/*set blending mode*/
enum
{
TX_DECAL = 0,
TX_MODULATE,
TX_REPLACE,
TX_BLEND,
};
/*set texturing blend mode*/
void gf_sc_texture_set_blend_mode(GF_TextureHandler *txh, u32 mode);
/*retrieves internal textureID used for the color plane (interleaved) or primary plane (YUV)*/
u32 gf_sc_texture_get_gl_id(GF_TextureHandler *txh);
#endif /*GPAC_DISABLE_3D*/
#ifdef __cplusplus
}
#endif
#endif /*_TEXTURING_H_*/