10f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines/*
20f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * Copyright (C) 2011-2012 The Android Open Source Project
30f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines *
40f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * Licensed under the Apache License, Version 2.0 (the "License");
50f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * you may not use this file except in compliance with the License.
60f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * You may obtain a copy of the License at
70f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines *
80f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines *      http://www.apache.org/licenses/LICENSE-2.0
90f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines *
100f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * Unless required by applicable law or agreed to in writing, software
110f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * distributed under the License is distributed on an "AS IS" BASIS,
120f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
130f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * See the License for the specific language governing permissions and
140f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * limitations under the License.
150f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines */
160f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines
170f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines/** @file rs_graphics.rsh
180f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines *  \brief Renderscript graphics API
190f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines *
200f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines *  A set of graphics functions used by Renderscript.
210f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines *
220f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines */
230f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines#ifndef __RS_GRAPHICS_RSH__
240f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines#define __RS_GRAPHICS_RSH__
250f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines
260f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines#include "rs_mesh.rsh"
270f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines#include "rs_program.rsh"
280f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines
290f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines#if (defined(RS_VERSION) && (RS_VERSION >= 14))
300f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines/**
310f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * Set the color target used for all subsequent rendering calls
320f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * @param colorTarget
330f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * @param slot
340f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines */
350f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesextern void __attribute__((overloadable))
360f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    rsgBindColorTarget(rs_allocation colorTarget, uint slot);
370f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines
380f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines/**
390f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * Clear the previously set color target
400f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * @param slot
410f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines */
420f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesextern void __attribute__((overloadable))
430f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    rsgClearColorTarget(uint slot);
440f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines
450f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines/**
460f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * Set the depth target used for all subsequent rendering calls
470f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * @param depthTarget
480f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines */
490f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesextern void __attribute__((overloadable))
500f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    rsgBindDepthTarget(rs_allocation depthTarget);
510f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines
520f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines/**
530f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * Clear the previously set depth target
540f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines */
550f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesextern void __attribute__((overloadable))
560f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    rsgClearDepthTarget(void);
570f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines
580f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines/**
590f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * Clear all color and depth targets and resume rendering into
600f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * the framebuffer
610f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines */
620f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesextern void __attribute__((overloadable))
630f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    rsgClearAllRenderTargets(void);
640f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines
650f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines/**
660f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * Force Renderscript to finish all rendering commands
670f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines */
680f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesextern uint __attribute__((overloadable))
690f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    rsgFinish(void);
700f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines
710f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines#endif //defined(RS_VERSION) && (RS_VERSION >= 14)
720f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines
730f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines/**
740f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * Bind a new ProgramFragment to the rendering context.
750f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines *
760f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * @param pf
770f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines */
780f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesextern void __attribute__((overloadable))
790f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    rsgBindProgramFragment(rs_program_fragment pf);
800f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines
810f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines/**
820f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * Bind a new ProgramStore to the rendering context.
830f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines *
840f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * @param ps
850f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines */
860f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesextern void __attribute__((overloadable))
870f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    rsgBindProgramStore(rs_program_store ps);
880f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines
890f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines/**
900f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * Bind a new ProgramVertex to the rendering context.
910f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines *
920f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * @param pv
930f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines */
940f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesextern void __attribute__((overloadable))
950f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    rsgBindProgramVertex(rs_program_vertex pv);
960f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines
970f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines/**
980f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * Bind a new ProgramRaster to the rendering context.
990f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines *
1000f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * @param pr
1010f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines */
1020f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesextern void __attribute__((overloadable))
1030f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    rsgBindProgramRaster(rs_program_raster pr);
1040f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines
1050f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines/**
1060f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * Bind a new Sampler object to a ProgramFragment.  The sampler will
1070f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * operate on the texture bound at the matching slot.
1080f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines *
1090f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * @param slot
1100f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines */
1110f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesextern void __attribute__((overloadable))
1120f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    rsgBindSampler(rs_program_fragment, uint slot, rs_sampler);
1130f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines
1140f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines/**
1150f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * Bind a new Allocation object to a ProgramFragment.  The
1160f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * Allocation must be a valid texture for the Program.  The sampling
1170f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * of the texture will be controled by the Sampler bound at the
1180f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * matching slot.
1190f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines *
1200f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * @param slot
1210f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines */
1220f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesextern void __attribute__((overloadable))
1230f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    rsgBindTexture(rs_program_fragment, uint slot, rs_allocation);
1240f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines
1250f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines/**
1260f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * Load the projection matrix for a currently bound fixed function
1270f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * vertex program. Calling this function with a custom vertex shader
1280f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * would result in an error.
1290f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * @param proj projection matrix
1300f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines */
1310f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesextern void __attribute__((overloadable))
1320f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    rsgProgramVertexLoadProjectionMatrix(const rs_matrix4x4 *proj);
1330f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines/**
1340f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * Load the model matrix for a currently bound fixed function
1350f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * vertex program. Calling this function with a custom vertex shader
1360f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * would result in an error.
1370f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * @param model model matrix
1380f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines */
1390f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesextern void __attribute__((overloadable))
1400f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    rsgProgramVertexLoadModelMatrix(const rs_matrix4x4 *model);
1410f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines/**
1420f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * Load the texture matrix for a currently bound fixed function
1430f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * vertex program. Calling this function with a custom vertex shader
1440f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * would result in an error.
1450f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * @param tex texture matrix
1460f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines */
1470f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesextern void __attribute__((overloadable))
1480f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    rsgProgramVertexLoadTextureMatrix(const rs_matrix4x4 *tex);
1490f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines/**
1500f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * Get the projection matrix for a currently bound fixed function
1510f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * vertex program. Calling this function with a custom vertex shader
1520f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * would result in an error.
1530f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * @param proj matrix to store the current projection matrix into
1540f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines */
1550f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesextern void __attribute__((overloadable))
1560f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    rsgProgramVertexGetProjectionMatrix(rs_matrix4x4 *proj);
1570f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines
1580f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines/**
1590f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * Set the constant color for a fixed function emulation program.
1600f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines *
1610f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * @param pf
1620f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * @param r
1630f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * @param g
1640f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * @param b
1650f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * @param a
1660f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines */
1670f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesextern void __attribute__((overloadable))
1680f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    rsgProgramFragmentConstantColor(rs_program_fragment pf, float r, float g, float b, float a);
1690f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines
1700f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines/**
1710f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * Bind a new Allocation object to a ProgramFragment.  The
1720f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * Allocation must be a valid constant input for the Program.
1730f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines *
1740f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * @param ps program object
1750f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * @param slot index of the constant buffer on the program
1760f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * @param c constants to bind
1770f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines */
1780f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesextern void __attribute__((overloadable))
1790f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    rsgBindConstant(rs_program_fragment ps, uint slot, rs_allocation c);
1800f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines
1810f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines/**
1820f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * Bind a new Allocation object to a ProgramVertex.  The
1830f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * Allocation must be a valid constant input for the Program.
1840f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines *
1850f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * @param pv program object
1860f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * @param slot index of the constant buffer on the program
1870f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * @param c constants to bind
1880f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines */
1890f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesextern void __attribute__((overloadable))
1900f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    rsgBindConstant(rs_program_vertex pv, uint slot, rs_allocation c);
1910f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines
1920f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines/**
1930f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * Get the width of the current rendering surface.
1940f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines *
1950f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * @return uint
1960f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines */
1970f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesextern uint __attribute__((overloadable))
1980f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    rsgGetWidth(void);
1990f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines
2000f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines/**
2010f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * Get the height of the current rendering surface.
2020f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines *
2030f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * @return uint
2040f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines */
2050f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesextern uint __attribute__((overloadable))
2060f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    rsgGetHeight(void);
2070f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines
2080f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines
2090f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines/**
2100f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * Sync the contents of an allocation from its SCRIPT memory space to its HW
2110f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * memory spaces.
2120f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines *
2130f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * @param alloc
2140f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines */
2150f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesextern void __attribute__((overloadable))
2160f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    rsgAllocationSyncAll(rs_allocation alloc);
2170f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines
2180f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines#if (defined(RS_VERSION) && (RS_VERSION >= 14))
2190f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines
2200f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines/**
2210f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * Sync the contents of an allocation from memory space
2220f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * specified by source.
2230f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines *
2240f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * @param alloc
2250f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * @param source
2260f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines */
2270f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesextern void __attribute__((overloadable))
2280f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    rsgAllocationSyncAll(rs_allocation alloc,
2290f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines                         rs_allocation_usage_type source);
2300f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines
2310f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines#endif //defined(RS_VERSION) && (RS_VERSION >= 14)
2320f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines
2330f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines/**
2340f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * Low performance utility function for drawing a simple rectangle.  Not
2350f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * intended for drawing large quantities of geometry.
2360f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines *
2370f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * @param x1
2380f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * @param y1
2390f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * @param x2
2400f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * @param y2
2410f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * @param z
2420f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines */
2430f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesextern void __attribute__((overloadable))
2440f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    rsgDrawRect(float x1, float y1, float x2, float y2, float z);
2450f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines
2460f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines/**
2470f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * Low performance utility function for drawing a simple quad.  Not intended for
2480f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * drawing large quantities of geometry.
2490f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines *
2500f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * @param x1
2510f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * @param y1
2520f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * @param z1
2530f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * @param x2
2540f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * @param y2
2550f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * @param z2
2560f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * @param x3
2570f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * @param y3
2580f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * @param z3
2590f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * @param x4
2600f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * @param y4
2610f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * @param z4
2620f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines */
2630f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesextern void __attribute__((overloadable))
2640f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    rsgDrawQuad(float x1, float y1, float z1,
2650f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines                float x2, float y2, float z2,
2660f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines                float x3, float y3, float z3,
2670f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines                float x4, float y4, float z4);
2680f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines
2690f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines
2700f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines/**
2710f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * Low performance utility function for drawing a textured quad.  Not intended
2720f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * for drawing large quantities of geometry.
2730f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines *
2740f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * @param x1
2750f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * @param y1
2760f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * @param z1
2770f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * @param u1
2780f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * @param v1
2790f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * @param x2
2800f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * @param y2
2810f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * @param z2
2820f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * @param u2
2830f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * @param v2
2840f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * @param x3
2850f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * @param y3
2860f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * @param z3
2870f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * @param u3
2880f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * @param v3
2890f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * @param x4
2900f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * @param y4
2910f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * @param z4
2920f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * @param u4
2930f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * @param v4
2940f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines */
2950f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesextern void __attribute__((overloadable))
2960f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    rsgDrawQuadTexCoords(float x1, float y1, float z1, float u1, float v1,
2970f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines                         float x2, float y2, float z2, float u2, float v2,
2980f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines                         float x3, float y3, float z3, float u3, float v3,
2990f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines                         float x4, float y4, float z4, float u4, float v4);
3000f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines
3010f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines
3020f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines/**
3030f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * Low performance function for drawing rectangles in screenspace.  This
3040f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * function uses the default passthough ProgramVertex.  Any bound ProgramVertex
3050f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * is ignored.  This function has considerable overhead and should not be used
3060f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * for drawing in shipping applications.
3070f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines *
3080f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * @param x
3090f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * @param y
3100f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * @param z
3110f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * @param w
3120f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * @param h
3130f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines */
3140f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesextern void __attribute__((overloadable))
3150f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    rsgDrawSpriteScreenspace(float x, float y, float z, float w, float h);
3160f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines
3170f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesextern void __attribute__((overloadable))
3180f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    rsgDrawPath(rs_path p);
3190f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines
3200f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines/**
3210f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * Draw a mesh using the current context state.  The whole mesh is
3220f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * rendered.
3230f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines *
3240f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * @param ism
3250f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines */
3260f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesextern void __attribute__((overloadable))
3270f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    rsgDrawMesh(rs_mesh ism);
3280f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines/**
3290f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * Draw part of a mesh using the current context state.
3300f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * @param ism mesh object to render
3310f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * @param primitiveIndex for meshes that contain multiple primitive groups
3320f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines *        this parameter specifies the index of the group to draw.
3330f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines */
3340f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesextern void __attribute__((overloadable))
3350f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    rsgDrawMesh(rs_mesh ism, uint primitiveIndex);
3360f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines/**
3370f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * Draw specified index range of part of a mesh using the current context state.
3380f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * @param ism mesh object to render
3390f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * @param primitiveIndex for meshes that contain multiple primitive groups
3400f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines *        this parameter specifies the index of the group to draw.
3410f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * @param start starting index in the range
3420f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * @param len number of indices to draw
3430f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines */
3440f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesextern void __attribute__((overloadable))
3450f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    rsgDrawMesh(rs_mesh ism, uint primitiveIndex, uint start, uint len);
3460f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines
3470f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines/**
3480f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * Clears the rendering surface to the specified color.
3490f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines *
3500f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * @param r
3510f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * @param g
3520f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * @param b
3530f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * @param a
3540f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines */
3550f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesextern void __attribute__((overloadable))
3560f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    rsgClearColor(float r, float g, float b, float a);
3570f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines
3580f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines/**
3590f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * Clears the depth suface to the specified value.
3600f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines */
3610f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesextern void __attribute__((overloadable))
3620f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    rsgClearDepth(float value);
3630f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines/**
3640f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * Draws text given a string and location
3650f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines */
3660f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesextern void __attribute__((overloadable))
3670f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    rsgDrawText(const char *, int x, int y);
3680f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines/**
3690f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * \overload
3700f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines */
3710f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesextern void __attribute__((overloadable))
3720f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    rsgDrawText(rs_allocation, int x, int y);
3730f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines/**
3740f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * Binds the font object to be used for all subsequent font rendering calls
3750f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * @param font object to bind
3760f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines */
3770f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesextern void __attribute__((overloadable))
3780f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    rsgBindFont(rs_font font);
3790f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines/**
3800f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * Sets the font color for all subsequent rendering calls
3810f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * @param r red component
3820f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * @param g green component
3830f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * @param b blue component
3840f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * @param a alpha component
3850f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines */
3860f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesextern void __attribute__((overloadable))
3870f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    rsgFontColor(float r, float g, float b, float a);
3880f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines/**
3890f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * Returns the bounding box of the text relative to (0, 0)
3900f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * Any of left, right, top, bottom could be NULL
3910f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines */
3920f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesextern void __attribute__((overloadable))
3930f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    rsgMeasureText(const char *, int *left, int *right, int *top, int *bottom);
3940f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines/**
3950f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * \overload
3960f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines */
3970f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesextern void __attribute__((overloadable))
3980f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    rsgMeasureText(rs_allocation, int *left, int *right, int *top, int *bottom);
3990f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines/**
4000f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * Computes an axis aligned bounding box of a mesh object
4010f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines */
4020f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesextern void __attribute__((overloadable))
4030f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    rsgMeshComputeBoundingBox(rs_mesh mesh, float *minX, float *minY, float *minZ,
4040f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines                                                float *maxX, float *maxY, float *maxZ);
4050f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines/**
4060f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * \overload
4070f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines */
4080f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines__inline__ static void __attribute__((overloadable, always_inline))
4090f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen HinesrsgMeshComputeBoundingBox(rs_mesh mesh, float3 *bBoxMin, float3 *bBoxMax) {
4100f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    float x1, y1, z1, x2, y2, z2;
4110f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    rsgMeshComputeBoundingBox(mesh, &x1, &y1, &z1, &x2, &y2, &z2);
4120f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    bBoxMin->x = x1;
4130f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    bBoxMin->y = y1;
4140f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    bBoxMin->z = z1;
4150f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    bBoxMax->x = x2;
4160f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    bBoxMax->y = y2;
4170f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    bBoxMax->z = z2;
4180f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines}
4190f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines
4200f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines#endif
4210f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines
422