422 lines
		
	
	
		
			11 KiB
		
	
	
	
		
			Plaintext
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			422 lines
		
	
	
		
			11 KiB
		
	
	
	
		
			Plaintext
		
	
	
		
			Executable File
		
	
	
	
	
| /*
 | |
|  * Copyright (C) 2011-2012 The Android Open Source Project
 | |
|  *
 | |
|  * Licensed under the Apache License, Version 2.0 (the "License");
 | |
|  * you may not use this file except in compliance with the License.
 | |
|  * You may obtain a copy of the License at
 | |
|  *
 | |
|  *      http://www.apache.org/licenses/LICENSE-2.0
 | |
|  *
 | |
|  * Unless required by applicable law or agreed to in writing, software
 | |
|  * distributed under the License is distributed on an "AS IS" BASIS,
 | |
|  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | |
|  * See the License for the specific language governing permissions and
 | |
|  * limitations under the License.
 | |
|  */
 | |
| 
 | |
| /** @file rs_graphics.rsh
 | |
|  *  \brief RenderScript graphics API
 | |
|  *
 | |
|  *  A set of graphics functions used by RenderScript.
 | |
|  *
 | |
|  */
 | |
| #ifndef __RS_GRAPHICS_RSH__
 | |
| #define __RS_GRAPHICS_RSH__
 | |
| 
 | |
| #include "rs_mesh.rsh"
 | |
| #include "rs_program.rsh"
 | |
| 
 | |
| #if (defined(RS_VERSION) && (RS_VERSION >= 14))
 | |
| /**
 | |
|  * Set the color target used for all subsequent rendering calls
 | |
|  * @param colorTarget
 | |
|  * @param slot
 | |
|  */
 | |
| extern void __attribute__((overloadable))
 | |
|     rsgBindColorTarget(rs_allocation colorTarget, uint slot);
 | |
| 
 | |
| /**
 | |
|  * Clear the previously set color target
 | |
|  * @param slot
 | |
|  */
 | |
| extern void __attribute__((overloadable))
 | |
|     rsgClearColorTarget(uint slot);
 | |
| 
 | |
| /**
 | |
|  * Set the depth target used for all subsequent rendering calls
 | |
|  * @param depthTarget
 | |
|  */
 | |
| extern void __attribute__((overloadable))
 | |
|     rsgBindDepthTarget(rs_allocation depthTarget);
 | |
| 
 | |
| /**
 | |
|  * Clear the previously set depth target
 | |
|  */
 | |
| extern void __attribute__((overloadable))
 | |
|     rsgClearDepthTarget(void);
 | |
| 
 | |
| /**
 | |
|  * Clear all color and depth targets and resume rendering into
 | |
|  * the framebuffer
 | |
|  */
 | |
| extern void __attribute__((overloadable))
 | |
|     rsgClearAllRenderTargets(void);
 | |
| 
 | |
| /**
 | |
|  * Force RenderScript to finish all rendering commands
 | |
|  */
 | |
| extern uint __attribute__((overloadable))
 | |
|     rsgFinish(void);
 | |
| 
 | |
| #endif //defined(RS_VERSION) && (RS_VERSION >= 14)
 | |
| 
 | |
| /**
 | |
|  * Bind a new ProgramFragment to the rendering context.
 | |
|  *
 | |
|  * @param pf
 | |
|  */
 | |
| extern void __attribute__((overloadable))
 | |
|     rsgBindProgramFragment(rs_program_fragment pf);
 | |
| 
 | |
| /**
 | |
|  * Bind a new ProgramStore to the rendering context.
 | |
|  *
 | |
|  * @param ps
 | |
|  */
 | |
| extern void __attribute__((overloadable))
 | |
|     rsgBindProgramStore(rs_program_store ps);
 | |
| 
 | |
| /**
 | |
|  * Bind a new ProgramVertex to the rendering context.
 | |
|  *
 | |
|  * @param pv
 | |
|  */
 | |
| extern void __attribute__((overloadable))
 | |
|     rsgBindProgramVertex(rs_program_vertex pv);
 | |
| 
 | |
| /**
 | |
|  * Bind a new ProgramRaster to the rendering context.
 | |
|  *
 | |
|  * @param pr
 | |
|  */
 | |
| extern void __attribute__((overloadable))
 | |
|     rsgBindProgramRaster(rs_program_raster pr);
 | |
| 
 | |
| /**
 | |
|  * Bind a new Sampler object to a ProgramFragment.  The sampler will
 | |
|  * operate on the texture bound at the matching slot.
 | |
|  *
 | |
|  * @param slot
 | |
|  */
 | |
| extern void __attribute__((overloadable))
 | |
|     rsgBindSampler(rs_program_fragment, uint slot, rs_sampler);
 | |
| 
 | |
| /**
 | |
|  * Bind a new Allocation object to a ProgramFragment.  The
 | |
|  * Allocation must be a valid texture for the Program.  The sampling
 | |
|  * of the texture will be controled by the Sampler bound at the
 | |
|  * matching slot.
 | |
|  *
 | |
|  * @param slot
 | |
|  */
 | |
| extern void __attribute__((overloadable))
 | |
|     rsgBindTexture(rs_program_fragment, uint slot, rs_allocation);
 | |
| 
 | |
| /**
 | |
|  * Load the projection matrix for a currently bound fixed function
 | |
|  * vertex program. Calling this function with a custom vertex shader
 | |
|  * would result in an error.
 | |
|  * @param proj projection matrix
 | |
|  */
 | |
| extern void __attribute__((overloadable))
 | |
|     rsgProgramVertexLoadProjectionMatrix(const rs_matrix4x4 *proj);
 | |
| /**
 | |
|  * Load the model matrix for a currently bound fixed function
 | |
|  * vertex program. Calling this function with a custom vertex shader
 | |
|  * would result in an error.
 | |
|  * @param model model matrix
 | |
|  */
 | |
| extern void __attribute__((overloadable))
 | |
|     rsgProgramVertexLoadModelMatrix(const rs_matrix4x4 *model);
 | |
| /**
 | |
|  * Load the texture matrix for a currently bound fixed function
 | |
|  * vertex program. Calling this function with a custom vertex shader
 | |
|  * would result in an error.
 | |
|  * @param tex texture matrix
 | |
|  */
 | |
| extern void __attribute__((overloadable))
 | |
|     rsgProgramVertexLoadTextureMatrix(const rs_matrix4x4 *tex);
 | |
| /**
 | |
|  * Get the projection matrix for a currently bound fixed function
 | |
|  * vertex program. Calling this function with a custom vertex shader
 | |
|  * would result in an error.
 | |
|  * @param proj matrix to store the current projection matrix into
 | |
|  */
 | |
| extern void __attribute__((overloadable))
 | |
|     rsgProgramVertexGetProjectionMatrix(rs_matrix4x4 *proj);
 | |
| 
 | |
| /**
 | |
|  * Set the constant color for a fixed function emulation program.
 | |
|  *
 | |
|  * @param pf
 | |
|  * @param r
 | |
|  * @param g
 | |
|  * @param b
 | |
|  * @param a
 | |
|  */
 | |
| extern void __attribute__((overloadable))
 | |
|     rsgProgramFragmentConstantColor(rs_program_fragment pf, float r, float g, float b, float a);
 | |
| 
 | |
| /**
 | |
|  * Bind a new Allocation object to a ProgramFragment.  The
 | |
|  * Allocation must be a valid constant input for the Program.
 | |
|  *
 | |
|  * @param ps program object
 | |
|  * @param slot index of the constant buffer on the program
 | |
|  * @param c constants to bind
 | |
|  */
 | |
| extern void __attribute__((overloadable))
 | |
|     rsgBindConstant(rs_program_fragment ps, uint slot, rs_allocation c);
 | |
| 
 | |
| /**
 | |
|  * Bind a new Allocation object to a ProgramVertex.  The
 | |
|  * Allocation must be a valid constant input for the Program.
 | |
|  *
 | |
|  * @param pv program object
 | |
|  * @param slot index of the constant buffer on the program
 | |
|  * @param c constants to bind
 | |
|  */
 | |
| extern void __attribute__((overloadable))
 | |
|     rsgBindConstant(rs_program_vertex pv, uint slot, rs_allocation c);
 | |
| 
 | |
| /**
 | |
|  * Get the width of the current rendering surface.
 | |
|  *
 | |
|  * @return uint
 | |
|  */
 | |
| extern uint __attribute__((overloadable))
 | |
|     rsgGetWidth(void);
 | |
| 
 | |
| /**
 | |
|  * Get the height of the current rendering surface.
 | |
|  *
 | |
|  * @return uint
 | |
|  */
 | |
| extern uint __attribute__((overloadable))
 | |
|     rsgGetHeight(void);
 | |
| 
 | |
| 
 | |
| /**
 | |
|  * Sync the contents of an allocation from its SCRIPT memory space to its HW
 | |
|  * memory spaces.
 | |
|  *
 | |
|  * @param alloc
 | |
|  */
 | |
| extern void __attribute__((overloadable))
 | |
|     rsgAllocationSyncAll(rs_allocation alloc);
 | |
| 
 | |
| #if (defined(RS_VERSION) && (RS_VERSION >= 14))
 | |
| 
 | |
| /**
 | |
|  * Sync the contents of an allocation from memory space
 | |
|  * specified by source.
 | |
|  *
 | |
|  * @param alloc
 | |
|  * @param source
 | |
|  */
 | |
| extern void __attribute__((overloadable))
 | |
|     rsgAllocationSyncAll(rs_allocation alloc,
 | |
|                          rs_allocation_usage_type source);
 | |
| 
 | |
| #endif //defined(RS_VERSION) && (RS_VERSION >= 14)
 | |
| 
 | |
| /**
 | |
|  * Low performance utility function for drawing a simple rectangle.  Not
 | |
|  * intended for drawing large quantities of geometry.
 | |
|  *
 | |
|  * @param x1
 | |
|  * @param y1
 | |
|  * @param x2
 | |
|  * @param y2
 | |
|  * @param z
 | |
|  */
 | |
| extern void __attribute__((overloadable))
 | |
|     rsgDrawRect(float x1, float y1, float x2, float y2, float z);
 | |
| 
 | |
| /**
 | |
|  * Low performance utility function for drawing a simple quad.  Not intended for
 | |
|  * drawing large quantities of geometry.
 | |
|  *
 | |
|  * @param x1
 | |
|  * @param y1
 | |
|  * @param z1
 | |
|  * @param x2
 | |
|  * @param y2
 | |
|  * @param z2
 | |
|  * @param x3
 | |
|  * @param y3
 | |
|  * @param z3
 | |
|  * @param x4
 | |
|  * @param y4
 | |
|  * @param z4
 | |
|  */
 | |
| extern void __attribute__((overloadable))
 | |
|     rsgDrawQuad(float x1, float y1, float z1,
 | |
|                 float x2, float y2, float z2,
 | |
|                 float x3, float y3, float z3,
 | |
|                 float x4, float y4, float z4);
 | |
| 
 | |
| 
 | |
| /**
 | |
|  * Low performance utility function for drawing a textured quad.  Not intended
 | |
|  * for drawing large quantities of geometry.
 | |
|  *
 | |
|  * @param x1
 | |
|  * @param y1
 | |
|  * @param z1
 | |
|  * @param u1
 | |
|  * @param v1
 | |
|  * @param x2
 | |
|  * @param y2
 | |
|  * @param z2
 | |
|  * @param u2
 | |
|  * @param v2
 | |
|  * @param x3
 | |
|  * @param y3
 | |
|  * @param z3
 | |
|  * @param u3
 | |
|  * @param v3
 | |
|  * @param x4
 | |
|  * @param y4
 | |
|  * @param z4
 | |
|  * @param u4
 | |
|  * @param v4
 | |
|  */
 | |
| extern void __attribute__((overloadable))
 | |
|     rsgDrawQuadTexCoords(float x1, float y1, float z1, float u1, float v1,
 | |
|                          float x2, float y2, float z2, float u2, float v2,
 | |
|                          float x3, float y3, float z3, float u3, float v3,
 | |
|                          float x4, float y4, float z4, float u4, float v4);
 | |
| 
 | |
| 
 | |
| /**
 | |
|  * Low performance function for drawing rectangles in screenspace.  This
 | |
|  * function uses the default passthough ProgramVertex.  Any bound ProgramVertex
 | |
|  * is ignored.  This function has considerable overhead and should not be used
 | |
|  * for drawing in shipping applications.
 | |
|  *
 | |
|  * @param x
 | |
|  * @param y
 | |
|  * @param z
 | |
|  * @param w
 | |
|  * @param h
 | |
|  */
 | |
| extern void __attribute__((overloadable))
 | |
|     rsgDrawSpriteScreenspace(float x, float y, float z, float w, float h);
 | |
| 
 | |
| extern void __attribute__((overloadable))
 | |
|     rsgDrawPath(rs_path p);
 | |
| 
 | |
| /**
 | |
|  * Draw a mesh using the current context state.  The whole mesh is
 | |
|  * rendered.
 | |
|  *
 | |
|  * @param ism
 | |
|  */
 | |
| extern void __attribute__((overloadable))
 | |
|     rsgDrawMesh(rs_mesh ism);
 | |
| /**
 | |
|  * Draw part of a mesh using the current context state.
 | |
|  * @param ism mesh object to render
 | |
|  * @param primitiveIndex for meshes that contain multiple primitive groups
 | |
|  *        this parameter specifies the index of the group to draw.
 | |
|  */
 | |
| extern void __attribute__((overloadable))
 | |
|     rsgDrawMesh(rs_mesh ism, uint primitiveIndex);
 | |
| /**
 | |
|  * Draw specified index range of part of a mesh using the current context state.
 | |
|  * @param ism mesh object to render
 | |
|  * @param primitiveIndex for meshes that contain multiple primitive groups
 | |
|  *        this parameter specifies the index of the group to draw.
 | |
|  * @param start starting index in the range
 | |
|  * @param len number of indices to draw
 | |
|  */
 | |
| extern void __attribute__((overloadable))
 | |
|     rsgDrawMesh(rs_mesh ism, uint primitiveIndex, uint start, uint len);
 | |
| 
 | |
| /**
 | |
|  * Clears the rendering surface to the specified color.
 | |
|  *
 | |
|  * @param r
 | |
|  * @param g
 | |
|  * @param b
 | |
|  * @param a
 | |
|  */
 | |
| extern void __attribute__((overloadable))
 | |
|     rsgClearColor(float r, float g, float b, float a);
 | |
| 
 | |
| /**
 | |
|  * Clears the depth suface to the specified value.
 | |
|  */
 | |
| extern void __attribute__((overloadable))
 | |
|     rsgClearDepth(float value);
 | |
| /**
 | |
|  * Draws text given a string and location
 | |
|  */
 | |
| extern void __attribute__((overloadable))
 | |
|     rsgDrawText(const char *, int x, int y);
 | |
| /**
 | |
|  * \overload
 | |
|  */
 | |
| extern void __attribute__((overloadable))
 | |
|     rsgDrawText(rs_allocation, int x, int y);
 | |
| /**
 | |
|  * Binds the font object to be used for all subsequent font rendering calls
 | |
|  * @param font object to bind
 | |
|  */
 | |
| extern void __attribute__((overloadable))
 | |
|     rsgBindFont(rs_font font);
 | |
| /**
 | |
|  * Sets the font color for all subsequent rendering calls
 | |
|  * @param r red component
 | |
|  * @param g green component
 | |
|  * @param b blue component
 | |
|  * @param a alpha component
 | |
|  */
 | |
| extern void __attribute__((overloadable))
 | |
|     rsgFontColor(float r, float g, float b, float a);
 | |
| /**
 | |
|  * Returns the bounding box of the text relative to (0, 0)
 | |
|  * Any of left, right, top, bottom could be NULL
 | |
|  */
 | |
| extern void __attribute__((overloadable))
 | |
|     rsgMeasureText(const char *, int *left, int *right, int *top, int *bottom);
 | |
| /**
 | |
|  * \overload
 | |
|  */
 | |
| extern void __attribute__((overloadable))
 | |
|     rsgMeasureText(rs_allocation, int *left, int *right, int *top, int *bottom);
 | |
| /**
 | |
|  * Computes an axis aligned bounding box of a mesh object
 | |
|  */
 | |
| extern void __attribute__((overloadable))
 | |
|     rsgMeshComputeBoundingBox(rs_mesh mesh, float *minX, float *minY, float *minZ,
 | |
|                                                 float *maxX, float *maxY, float *maxZ);
 | |
| /**
 | |
|  * \overload
 | |
|  */
 | |
| __inline__ static void __attribute__((overloadable, always_inline))
 | |
| rsgMeshComputeBoundingBox(rs_mesh mesh, float3 *bBoxMin, float3 *bBoxMax) {
 | |
|     float x1, y1, z1, x2, y2, z2;
 | |
|     rsgMeshComputeBoundingBox(mesh, &x1, &y1, &z1, &x2, &y2, &z2);
 | |
|     bBoxMin->x = x1;
 | |
|     bBoxMin->y = y1;
 | |
|     bBoxMin->z = z1;
 | |
|     bBoxMax->x = x2;
 | |
|     bBoxMax->y = y2;
 | |
|     bBoxMax->z = z2;
 | |
| }
 | |
| 
 | |
| #endif
 | |
| 
 |