rs_graphics.rsh revision ffe87773177672219189c9319ed5ab699fb978cc
1/* 2 * Copyright (C) 2011 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17/** @file rs_graphics.rsh 18 * \brief Renderscript graphics API 19 * 20 * A set of graphics functions used by Renderscript. 21 * 22 */ 23#ifndef __RS_GRAPHICS_RSH__ 24#define __RS_GRAPHICS_RSH__ 25#if (defined(RS_VERSION) && (RS_VERSION >= 14)) 26/** 27 * Set the color target used for all subsequent rendering calls 28 * @param colorTarget 29 * @param slot 30 */ 31extern void __attribute__((overloadable)) 32 rsgBindColorTarget(rs_allocation colorTarget, uint slot); 33 34/** 35 * Clear the previously set color target 36 * @param slot 37 */ 38extern void __attribute__((overloadable)) 39 rsgClearColorTarget(uint slot); 40 41/** 42 * Set the depth target used for all subsequent rendering calls 43 * @param depthTarget 44 */ 45extern void __attribute__((overloadable)) 46 rsgBindDepthTarget(rs_allocation depthTarget); 47 48/** 49 * Clear the previously set depth target 50 */ 51extern void __attribute__((overloadable)) 52 rsgClearDepthTarget(void); 53 54/** 55 * Clear all color and depth targets and resume rendering into 56 * the framebuffer 57 */ 58extern void __attribute__((overloadable)) 59 rsgClearAllRenderTargets(void); 60 61/** 62 * Force Renderscript to finish all rendering commands 63 */ 64extern uint __attribute__((overloadable)) 65 rsgFinish(void); 66 67#endif //defined(RS_VERSION) && (RS_VERSION >= 14) 68 69/** 70 * Bind a new ProgramFragment to the rendering context. 71 * 72 * @param pf 73 */ 74extern void __attribute__((overloadable)) 75 rsgBindProgramFragment(rs_program_fragment pf); 76 77/** 78 * Bind a new ProgramStore to the rendering context. 79 * 80 * @param ps 81 */ 82extern void __attribute__((overloadable)) 83 rsgBindProgramStore(rs_program_store ps); 84 85/** 86 * Bind a new ProgramVertex to the rendering context. 87 * 88 * @param pv 89 */ 90extern void __attribute__((overloadable)) 91 rsgBindProgramVertex(rs_program_vertex pv); 92 93/** 94 * Bind a new ProgramRaster to the rendering context. 95 * 96 * @param pr 97 */ 98extern void __attribute__((overloadable)) 99 rsgBindProgramRaster(rs_program_raster pr); 100 101/** 102 * Bind a new Sampler object to a ProgramFragment. The sampler will 103 * operate on the texture bound at the matching slot. 104 * 105 * @param slot 106 */ 107extern void __attribute__((overloadable)) 108 rsgBindSampler(rs_program_fragment, uint slot, rs_sampler); 109 110/** 111 * Bind a new Allocation object to a ProgramFragment. The 112 * Allocation must be a valid texture for the Program. The sampling 113 * of the texture will be controled by the Sampler bound at the 114 * matching slot. 115 * 116 * @param slot 117 */ 118extern void __attribute__((overloadable)) 119 rsgBindTexture(rs_program_fragment, uint slot, rs_allocation); 120 121/** 122 * Load the projection matrix for a currently bound fixed function 123 * vertex program. Calling this function with a custom vertex shader 124 * would result in an error. 125 * @param proj projection matrix 126 */ 127extern void __attribute__((overloadable)) 128 rsgProgramVertexLoadProjectionMatrix(const rs_matrix4x4 *proj); 129/** 130 * Load the model matrix for a currently bound fixed function 131 * vertex program. Calling this function with a custom vertex shader 132 * would result in an error. 133 * @param model model matrix 134 */ 135extern void __attribute__((overloadable)) 136 rsgProgramVertexLoadModelMatrix(const rs_matrix4x4 *model); 137/** 138 * Load the texture matrix for a currently bound fixed function 139 * vertex program. Calling this function with a custom vertex shader 140 * would result in an error. 141 * @param tex texture matrix 142 */ 143extern void __attribute__((overloadable)) 144 rsgProgramVertexLoadTextureMatrix(const rs_matrix4x4 *tex); 145/** 146 * Get the projection matrix for a currently bound fixed function 147 * vertex program. Calling this function with a custom vertex shader 148 * would result in an error. 149 * @param proj matrix to store the current projection matrix into 150 */ 151extern void __attribute__((overloadable)) 152 rsgProgramVertexGetProjectionMatrix(rs_matrix4x4 *proj); 153 154/** 155 * Set the constant color for a fixed function emulation program. 156 * 157 * @param pf 158 * @param r 159 * @param g 160 * @param b 161 * @param a 162 */ 163extern void __attribute__((overloadable)) 164 rsgProgramFragmentConstantColor(rs_program_fragment pf, float r, float g, float b, float a); 165 166/** 167 * Get the width of the current rendering surface. 168 * 169 * @return uint 170 */ 171extern uint __attribute__((overloadable)) 172 rsgGetWidth(void); 173 174/** 175 * Get the height of the current rendering surface. 176 * 177 * @return uint 178 */ 179extern uint __attribute__((overloadable)) 180 rsgGetHeight(void); 181 182 183/** 184 * Sync the contents of an allocation from its SCRIPT memory space to its HW 185 * memory spaces. 186 * 187 * @param alloc 188 */ 189extern void __attribute__((overloadable)) 190 rsgAllocationSyncAll(rs_allocation alloc); 191 192#if (defined(RS_VERSION) && (RS_VERSION >= 14)) 193 194/** 195 * Sync the contents of an allocation from memory space 196 * specified by source. 197 * 198 * @param alloc 199 * @param source 200 */ 201extern void __attribute__((overloadable)) 202 rsgAllocationSyncAll(rs_allocation alloc, 203 rs_allocation_usage_type source); 204 205#endif //defined(RS_VERSION) && (RS_VERSION >= 14) 206 207/** 208 * Low performance utility function for drawing a simple rectangle. Not 209 * intended for drawing large quantities of geometry. 210 * 211 * @param x1 212 * @param y1 213 * @param x2 214 * @param y2 215 * @param z 216 */ 217extern void __attribute__((overloadable)) 218 rsgDrawRect(float x1, float y1, float x2, float y2, float z); 219 220/** 221 * Low performance utility function for drawing a simple quad. Not intended for 222 * drawing large quantities of geometry. 223 * 224 * @param x1 225 * @param y1 226 * @param z1 227 * @param x2 228 * @param y2 229 * @param z2 230 * @param x3 231 * @param y3 232 * @param z3 233 * @param x4 234 * @param y4 235 * @param z4 236 */ 237extern void __attribute__((overloadable)) 238 rsgDrawQuad(float x1, float y1, float z1, 239 float x2, float y2, float z2, 240 float x3, float y3, float z3, 241 float x4, float y4, float z4); 242 243 244/** 245 * Low performance utility function for drawing a textured quad. Not intended 246 * for drawing large quantities of geometry. 247 * 248 * @param x1 249 * @param y1 250 * @param z1 251 * @param u1 252 * @param v1 253 * @param x2 254 * @param y2 255 * @param z2 256 * @param u2 257 * @param v2 258 * @param x3 259 * @param y3 260 * @param z3 261 * @param u3 262 * @param v3 263 * @param x4 264 * @param y4 265 * @param z4 266 * @param u4 267 * @param v4 268 */ 269extern void __attribute__((overloadable)) 270 rsgDrawQuadTexCoords(float x1, float y1, float z1, float u1, float v1, 271 float x2, float y2, float z2, float u2, float v2, 272 float x3, float y3, float z3, float u3, float v3, 273 float x4, float y4, float z4, float u4, float v4); 274 275 276/** 277 * Low performance function for drawing rectangles in screenspace. This 278 * function uses the default passthough ProgramVertex. Any bound ProgramVertex 279 * is ignored. This function has considerable overhead and should not be used 280 * for drawing in shipping applications. 281 * 282 * @param x 283 * @param y 284 * @param z 285 * @param w 286 * @param h 287 */ 288extern void __attribute__((overloadable)) 289 rsgDrawSpriteScreenspace(float x, float y, float z, float w, float h); 290 291/** 292 * Draw a mesh using the current context state. The whole mesh is 293 * rendered. 294 * 295 * @param ism 296 */ 297extern void __attribute__((overloadable)) 298 rsgDrawMesh(rs_mesh ism); 299/** 300 * Draw part of a mesh using the current context state. 301 * @param ism mesh object to render 302 * @param primitiveIndex for meshes that contain multiple primitive groups 303 * this parameter specifies the index of the group to draw. 304 */ 305extern void __attribute__((overloadable)) 306 rsgDrawMesh(rs_mesh ism, uint primitiveIndex); 307/** 308 * Draw specified index range of part of a mesh using the current context state. 309 * @param ism mesh object to render 310 * @param primitiveIndex for meshes that contain multiple primitive groups 311 * this parameter specifies the index of the group to draw. 312 * @param start starting index in the range 313 * @param len number of indices to draw 314 */ 315extern void __attribute__((overloadable)) 316 rsgDrawMesh(rs_mesh ism, uint primitiveIndex, uint start, uint len); 317 318/** 319 * Clears the rendering surface to the specified color. 320 * 321 * @param r 322 * @param g 323 * @param b 324 * @param a 325 */ 326extern void __attribute__((overloadable)) 327 rsgClearColor(float r, float g, float b, float a); 328 329/** 330 * Clears the depth suface to the specified value. 331 */ 332extern void __attribute__((overloadable)) 333 rsgClearDepth(float value); 334/** 335 * Draws text given a string and location 336 */ 337extern void __attribute__((overloadable)) 338 rsgDrawText(const char *, int x, int y); 339/** 340 * \overload 341 */ 342extern void __attribute__((overloadable)) 343 rsgDrawText(rs_allocation, int x, int y); 344/** 345 * Binds the font object to be used for all subsequent font rendering calls 346 * @param font object to bind 347 */ 348extern void __attribute__((overloadable)) 349 rsgBindFont(rs_font font); 350/** 351 * Sets the font color for all subsequent rendering calls 352 * @param r red component 353 * @param g green component 354 * @param b blue component 355 * @param a alpha component 356 */ 357extern void __attribute__((overloadable)) 358 rsgFontColor(float r, float g, float b, float a); 359/** 360 * Returns the bounding box of the text relative to (0, 0) 361 * Any of left, right, top, bottom could be NULL 362 */ 363extern void __attribute__((overloadable)) 364 rsgMeasureText(const char *, int *left, int *right, int *top, int *bottom); 365/** 366 * \overload 367 */ 368extern void __attribute__((overloadable)) 369 rsgMeasureText(rs_allocation, int *left, int *right, int *top, int *bottom); 370/** 371 * Computes an axis aligned bounding box of a mesh object 372 */ 373extern void __attribute__((overloadable)) 374 rsgMeshComputeBoundingBox(rs_mesh mesh, float *minX, float *minY, float *minZ, 375 float *maxX, float *maxY, float *maxZ); 376/** 377 * \overload 378 */ 379__inline__ static void __attribute__((overloadable, always_inline)) 380rsgMeshComputeBoundingBox(rs_mesh mesh, float3 *bBoxMin, float3 *bBoxMax) { 381 float x1, y1, z1, x2, y2, z2; 382 rsgMeshComputeBoundingBox(mesh, &x1, &y1, &z1, &x2, &y2, &z2); 383 bBoxMin->x = x1; 384 bBoxMin->y = y1; 385 bBoxMin->z = z1; 386 bBoxMax->x = x2; 387 bBoxMax->y = y2; 388 bBoxMax->z = z2; 389} 390 391#endif 392 393