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