rs_graphics.rsh revision 4325387cee36fe373b1a792fb2e65ef00535bbdd
19996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk/*
29996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk * Copyright (C) 2011 The Android Open Source Project
39996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk *
49996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk * Licensed under the Apache License, Version 2.0 (the "License");
59996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk * you may not use this file except in compliance with the License.
69996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk * You may obtain a copy of the License at
79996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk *
89996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk *      http://www.apache.org/licenses/LICENSE-2.0
99996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk *
109996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk * Unless required by applicable law or agreed to in writing, software
119996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk * distributed under the License is distributed on an "AS IS" BASIS,
129996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
139996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk * See the License for the specific language governing permissions and
149996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk * limitations under the License.
159996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk */
169996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk
179996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk/** @file rs_graphics.rsh
189996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk *  \brief Renderscript graphics API
199996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk *
209996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk *  A set of graphics functions used by Renderscript.
219996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk *
229996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk */
231b937f5c0d66a65daf07a45554c98a9f2481b9baJason Sams#ifndef __RS_GRAPHICS_RSH__
241b937f5c0d66a65daf07a45554c98a9f2481b9baJason Sams#define __RS_GRAPHICS_RSH__
251b937f5c0d66a65daf07a45554c98a9f2481b9baJason Sams
264325387cee36fe373b1a792fb2e65ef00535bbddAlex Sakhartchouk#if (defined(RS_VERSION) && (RS_VERSION >= 14))
277d9c5ffccb7a5e682860f752403e5a03aed587beAlex Sakhartchouk/**
287d9c5ffccb7a5e682860f752403e5a03aed587beAlex Sakhartchouk * Set the color target used for all subsequent rendering calls
297d9c5ffccb7a5e682860f752403e5a03aed587beAlex Sakhartchouk * @param colorTarget
307d9c5ffccb7a5e682860f752403e5a03aed587beAlex Sakhartchouk * @param slot
317d9c5ffccb7a5e682860f752403e5a03aed587beAlex Sakhartchouk */
327d9c5ffccb7a5e682860f752403e5a03aed587beAlex Sakhartchoukextern void __attribute__((overloadable))
337d9c5ffccb7a5e682860f752403e5a03aed587beAlex Sakhartchouk    rsgBindColorTarget(rs_allocation colorTarget, uint slot);
347d9c5ffccb7a5e682860f752403e5a03aed587beAlex Sakhartchouk
357d9c5ffccb7a5e682860f752403e5a03aed587beAlex Sakhartchouk/**
367d9c5ffccb7a5e682860f752403e5a03aed587beAlex Sakhartchouk * Clear the previously set color target
377d9c5ffccb7a5e682860f752403e5a03aed587beAlex Sakhartchouk * @param slot
387d9c5ffccb7a5e682860f752403e5a03aed587beAlex Sakhartchouk */
397d9c5ffccb7a5e682860f752403e5a03aed587beAlex Sakhartchoukextern void __attribute__((overloadable))
407d9c5ffccb7a5e682860f752403e5a03aed587beAlex Sakhartchouk    rsgClearColorTarget(uint slot);
417d9c5ffccb7a5e682860f752403e5a03aed587beAlex Sakhartchouk
427d9c5ffccb7a5e682860f752403e5a03aed587beAlex Sakhartchouk/**
437d9c5ffccb7a5e682860f752403e5a03aed587beAlex Sakhartchouk * Set the depth target used for all subsequent rendering calls
447d9c5ffccb7a5e682860f752403e5a03aed587beAlex Sakhartchouk * @param depthTarget
457d9c5ffccb7a5e682860f752403e5a03aed587beAlex Sakhartchouk */
467d9c5ffccb7a5e682860f752403e5a03aed587beAlex Sakhartchoukextern void __attribute__((overloadable))
477d9c5ffccb7a5e682860f752403e5a03aed587beAlex Sakhartchouk    rsgBindDepthTarget(rs_allocation depthTarget);
487d9c5ffccb7a5e682860f752403e5a03aed587beAlex Sakhartchouk
497d9c5ffccb7a5e682860f752403e5a03aed587beAlex Sakhartchouk/**
507d9c5ffccb7a5e682860f752403e5a03aed587beAlex Sakhartchouk * Clear the previously set depth target
517d9c5ffccb7a5e682860f752403e5a03aed587beAlex Sakhartchouk */
527d9c5ffccb7a5e682860f752403e5a03aed587beAlex Sakhartchoukextern void __attribute__((overloadable))
537d9c5ffccb7a5e682860f752403e5a03aed587beAlex Sakhartchouk    rsgClearDepthTarget(void);
547d9c5ffccb7a5e682860f752403e5a03aed587beAlex Sakhartchouk
557d9c5ffccb7a5e682860f752403e5a03aed587beAlex Sakhartchouk/**
567d9c5ffccb7a5e682860f752403e5a03aed587beAlex Sakhartchouk * Clear all color and depth targets and resume rendering into
577d9c5ffccb7a5e682860f752403e5a03aed587beAlex Sakhartchouk * the framebuffer
587d9c5ffccb7a5e682860f752403e5a03aed587beAlex Sakhartchouk */
597d9c5ffccb7a5e682860f752403e5a03aed587beAlex Sakhartchoukextern void __attribute__((overloadable))
607d9c5ffccb7a5e682860f752403e5a03aed587beAlex Sakhartchouk    rsgClearAllRenderTargets(void);
617d9c5ffccb7a5e682860f752403e5a03aed587beAlex Sakhartchouk
627d9c5ffccb7a5e682860f752403e5a03aed587beAlex Sakhartchouk/**
639996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk * Force Renderscript to finish all rendering commands
647d9c5ffccb7a5e682860f752403e5a03aed587beAlex Sakhartchouk */
657d9c5ffccb7a5e682860f752403e5a03aed587beAlex Sakhartchoukextern uint __attribute__((overloadable))
667d9c5ffccb7a5e682860f752403e5a03aed587beAlex Sakhartchouk    rsgFinish(void);
6709aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams
684325387cee36fe373b1a792fb2e65ef00535bbddAlex Sakhartchouk#endif //defined(RS_VERSION) && (RS_VERSION >= 14)
694325387cee36fe373b1a792fb2e65ef00535bbddAlex Sakhartchouk
7009aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams/**
7109aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * Bind a new ProgramFragment to the rendering context.
7209aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams *
7309aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * @param pf
7409aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams */
757349547db61d2d458b31c074b902d56d082e5d84Jason Samsextern void __attribute__((overloadable))
7609aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams    rsgBindProgramFragment(rs_program_fragment pf);
7709aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams
7809aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams/**
7909aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * Bind a new ProgramStore to the rendering context.
8009aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams *
8109aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * @param ps
8209aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams */
837349547db61d2d458b31c074b902d56d082e5d84Jason Samsextern void __attribute__((overloadable))
8409aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams    rsgBindProgramStore(rs_program_store ps);
8509aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams
8609aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams/**
8709aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * Bind a new ProgramVertex to the rendering context.
8809aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams *
8909aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * @param pv
9009aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams */
917349547db61d2d458b31c074b902d56d082e5d84Jason Samsextern void __attribute__((overloadable))
9209aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams    rsgBindProgramVertex(rs_program_vertex pv);
9309aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams
9409aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams/**
9509aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * Bind a new ProgramRaster to the rendering context.
9609aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams *
9709aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * @param pr
9809aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams */
997349547db61d2d458b31c074b902d56d082e5d84Jason Samsextern void __attribute__((overloadable))
10009aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams    rsgBindProgramRaster(rs_program_raster pr);
101f2bcce71dc7a2328355ce779028904772a85cc5fJason Sams
10209aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams/**
10309aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * Bind a new Sampler object to a ProgramFragment.  The sampler will
10409aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * operate on the texture bound at the matching slot.
10509aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams *
10609aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * @param slot
10709aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams */
1087349547db61d2d458b31c074b902d56d082e5d84Jason Samsextern void __attribute__((overloadable))
1097349547db61d2d458b31c074b902d56d082e5d84Jason Sams    rsgBindSampler(rs_program_fragment, uint slot, rs_sampler);
11009aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams
11109aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams/**
11209aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * Bind a new Allocation object to a ProgramFragment.  The
11309aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * Allocation must be a valid texture for the Program.  The sampling
11409aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * of the texture will be controled by the Sampler bound at the
11509aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * matching slot.
11609aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams *
11709aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * @param slot
11809aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams */
1197349547db61d2d458b31c074b902d56d082e5d84Jason Samsextern void __attribute__((overloadable))
1207349547db61d2d458b31c074b902d56d082e5d84Jason Sams    rsgBindTexture(rs_program_fragment, uint slot, rs_allocation);
12151f36ab783316b1c036bab4c3f7e0934dd564bd7Jason Sams
1229996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk/**
1239996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk * Load the projection matrix for a currently bound fixed function
1249996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk * vertex program. Calling this function with a custom vertex shader
1259996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk * would result in an error.
1269996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk * @param proj projection matrix
1279996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk */
1287349547db61d2d458b31c074b902d56d082e5d84Jason Samsextern void __attribute__((overloadable))
1299996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk    rsgProgramVertexLoadProjectionMatrix(const rs_matrix4x4 *proj);
1309996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk/**
1319996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk * Load the model matrix for a currently bound fixed function
1329996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk * vertex program. Calling this function with a custom vertex shader
1339996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk * would result in an error.
1349996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk * @param model model matrix
1359996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk */
1367349547db61d2d458b31c074b902d56d082e5d84Jason Samsextern void __attribute__((overloadable))
1379996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk    rsgProgramVertexLoadModelMatrix(const rs_matrix4x4 *model);
1389996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk/**
1399996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk * Load the texture matrix for a currently bound fixed function
1409996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk * vertex program. Calling this function with a custom vertex shader
1419996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk * would result in an error.
1429996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk * @param tex texture matrix
1439996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk */
1447349547db61d2d458b31c074b902d56d082e5d84Jason Samsextern void __attribute__((overloadable))
1459996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk    rsgProgramVertexLoadTextureMatrix(const rs_matrix4x4 *tex);
1469996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk/**
1479996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk * Get the projection matrix for a currently bound fixed function
1489996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk * vertex program. Calling this function with a custom vertex shader
1499996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk * would result in an error.
1509996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk * @param proj matrix to store the current projection matrix into
1519996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk */
1526445e5210c6d7f8689e94be9026153d017c9545bJason Samsextern void __attribute__((overloadable))
1539996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk    rsgProgramVertexGetProjectionMatrix(rs_matrix4x4 *proj);
15495333f998fd4a983f89e5128e85f6f710d200bd9Alex Sakhartchouk
15509aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams/**
15609aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * Set the constant color for a fixed function emulation program.
15709aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams *
15809aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * @param pf
15909aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * @param r
16009aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * @param g
16109aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * @param b
16209aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * @param a
16309aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams */
16495333f998fd4a983f89e5128e85f6f710d200bd9Alex Sakhartchoukextern void __attribute__((overloadable))
16509aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams    rsgProgramFragmentConstantColor(rs_program_fragment pf, float r, float g, float b, float a);
1666445e5210c6d7f8689e94be9026153d017c9545bJason Sams
16709aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams/**
16809aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * Get the width of the current rendering surface.
16909aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams *
17009aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * @return uint
17109aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams */
1727349547db61d2d458b31c074b902d56d082e5d84Jason Samsextern uint __attribute__((overloadable))
1737349547db61d2d458b31c074b902d56d082e5d84Jason Sams    rsgGetWidth(void);
17409aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams
17509aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams/**
17609aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * Get the height of the current rendering surface.
17709aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams *
17809aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * @return uint
17909aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams */
1807349547db61d2d458b31c074b902d56d082e5d84Jason Samsextern uint __attribute__((overloadable))
1817349547db61d2d458b31c074b902d56d082e5d84Jason Sams    rsgGetHeight(void);
18251f36ab783316b1c036bab4c3f7e0934dd564bd7Jason Sams
18309aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams
18409aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams/**
18509aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * Sync the contents of an allocation from its SCRIPT memory space to its HW
18609aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * memory spaces.
18709aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams *
18809aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * @param alloc
18909aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams */
1907349547db61d2d458b31c074b902d56d082e5d84Jason Samsextern void __attribute__((overloadable))
19109aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams    rsgAllocationSyncAll(rs_allocation alloc);
192b7e83bda41e66c966b98935b44140692bfe0c4caJason Sams
1934325387cee36fe373b1a792fb2e65ef00535bbddAlex Sakhartchouk#if (defined(RS_VERSION) && (RS_VERSION >= 14))
1944325387cee36fe373b1a792fb2e65ef00535bbddAlex Sakhartchouk
19509aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams/**
19674a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk * Sync the contents of an allocation from memory space
19774a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk * specified by source.
19874a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk *
19974a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk * @param alloc
20074a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk * @param source
20174a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk */
20274a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchoukextern void __attribute__((overloadable))
20374a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk    rsgAllocationSyncAll(rs_allocation alloc,
20474a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk                         rs_allocation_usage_type source);
20574a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk
2064325387cee36fe373b1a792fb2e65ef00535bbddAlex Sakhartchouk#endif //defined(RS_VERSION) && (RS_VERSION >= 14)
2074325387cee36fe373b1a792fb2e65ef00535bbddAlex Sakhartchouk
20874a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk/**
20909aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * Low performance utility function for drawing a simple rectangle.  Not
21009aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * intended for drawing large quantities of geometry.
21109aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams *
21209aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * @param x1
21309aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * @param y1
21409aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * @param x2
21509aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * @param y2
21609aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * @param z
21709aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams */
218b7e83bda41e66c966b98935b44140692bfe0c4caJason Samsextern void __attribute__((overloadable))
2197349547db61d2d458b31c074b902d56d082e5d84Jason Sams    rsgDrawRect(float x1, float y1, float x2, float y2, float z);
22009aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams
22109aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams/**
22209aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * Low performance utility function for drawing a simple quad.  Not intended for
22309aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * drawing large quantities of geometry.
22409aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams *
22509aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * @param x1
22609aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * @param y1
22709aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * @param z1
22809aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * @param x2
22909aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * @param y2
23009aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * @param z2
23109aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * @param x3
23209aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * @param y3
23309aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * @param z3
23409aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * @param x4
23509aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * @param y4
23609aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * @param z4
23709aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams */
2387349547db61d2d458b31c074b902d56d082e5d84Jason Samsextern void __attribute__((overloadable))
2397349547db61d2d458b31c074b902d56d082e5d84Jason Sams    rsgDrawQuad(float x1, float y1, float z1,
2407349547db61d2d458b31c074b902d56d082e5d84Jason Sams                float x2, float y2, float z2,
2417349547db61d2d458b31c074b902d56d082e5d84Jason Sams                float x3, float y3, float z3,
2427349547db61d2d458b31c074b902d56d082e5d84Jason Sams                float x4, float y4, float z4);
24309aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams
24409aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams
24509aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams/**
24609aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * Low performance utility function for drawing a textured quad.  Not intended
24709aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * for drawing large quantities of geometry.
24809aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams *
24909aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * @param x1
25009aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * @param y1
25109aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * @param z1
25209aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * @param u1
25309aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * @param v1
25409aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * @param x2
25509aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * @param y2
25609aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * @param z2
25709aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * @param u2
25809aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * @param v2
25909aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * @param x3
26009aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * @param y3
26109aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * @param z3
26209aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * @param u3
26309aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * @param v3
26409aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * @param x4
26509aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * @param y4
26609aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * @param z4
26709aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * @param u4
26809aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * @param v4
26909aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams */
2707349547db61d2d458b31c074b902d56d082e5d84Jason Samsextern void __attribute__((overloadable))
2717349547db61d2d458b31c074b902d56d082e5d84Jason Sams    rsgDrawQuadTexCoords(float x1, float y1, float z1, float u1, float v1,
2727349547db61d2d458b31c074b902d56d082e5d84Jason Sams                         float x2, float y2, float z2, float u2, float v2,
2737349547db61d2d458b31c074b902d56d082e5d84Jason Sams                         float x3, float y3, float z3, float u3, float v3,
2747349547db61d2d458b31c074b902d56d082e5d84Jason Sams                         float x4, float y4, float z4, float u4, float v4);
27509aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams
27609aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams
27709aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams/**
27809aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * Low performance function for drawing rectangles in screenspace.  This
27909aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * function uses the default passthough ProgramVertex.  Any bound ProgramVertex
28009aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * is ignored.  This function has considerable overhead and should not be used
28109aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * for drawing in shipping applications.
28209aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams *
28309aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * @param x
28409aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * @param y
28509aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * @param z
28609aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * @param w
28709aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * @param h
28809aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams */
2897349547db61d2d458b31c074b902d56d082e5d84Jason Samsextern void __attribute__((overloadable))
2907349547db61d2d458b31c074b902d56d082e5d84Jason Sams    rsgDrawSpriteScreenspace(float x, float y, float z, float w, float h);
29151f36ab783316b1c036bab4c3f7e0934dd564bd7Jason Sams
29209aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams/**
2939996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk * Draw a mesh using the current context state.  The whole mesh is
29409aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * rendered.
29509aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams *
29609aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * @param ism
29709aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams */
2987349547db61d2d458b31c074b902d56d082e5d84Jason Samsextern void __attribute__((overloadable))
2997349547db61d2d458b31c074b902d56d082e5d84Jason Sams    rsgDrawMesh(rs_mesh ism);
3009996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk/**
3019996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk * Draw part of a mesh using the current context state.
3029996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk * @param ism mesh object to render
3039996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk * @param primitiveIndex for meshes that contain multiple primitive groups
3049996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk *        this parameter specifies the index of the group to draw.
3059996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk */
3067349547db61d2d458b31c074b902d56d082e5d84Jason Samsextern void __attribute__((overloadable))
3077349547db61d2d458b31c074b902d56d082e5d84Jason Sams    rsgDrawMesh(rs_mesh ism, uint primitiveIndex);
3089996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk/**
3099996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk * Draw specified index range of part of a mesh using the current context state.
3109996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk * @param ism mesh object to render
3119996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk * @param primitiveIndex for meshes that contain multiple primitive groups
3129996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk *        this parameter specifies the index of the group to draw.
3139996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk * @param start starting index in the range
3149996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk * @param len number of indices to draw
3159996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk */
3167349547db61d2d458b31c074b902d56d082e5d84Jason Samsextern void __attribute__((overloadable))
3177349547db61d2d458b31c074b902d56d082e5d84Jason Sams    rsgDrawMesh(rs_mesh ism, uint primitiveIndex, uint start, uint len);
3184e9a7a8ded109e16b163789274899447cef02642Alex Sakhartchouk
31909aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams/**
32009aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * Clears the rendering surface to the specified color.
32109aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams *
32209aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * @param r
32309aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * @param g
32409aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * @param b
32509aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * @param a
32609aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams */
3277349547db61d2d458b31c074b902d56d082e5d84Jason Samsextern void __attribute__((overloadable))
32809aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams    rsgClearColor(float r, float g, float b, float a);
32909aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams
33009aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams/**
33109aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * Clears the depth suface to the specified value.
33209aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams */
3337349547db61d2d458b31c074b902d56d082e5d84Jason Samsextern void __attribute__((overloadable))
33409aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams    rsgClearDepth(float value);
3359996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk/**
3369996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk * Draws text given a string and location
3379996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk */
3387349547db61d2d458b31c074b902d56d082e5d84Jason Samsextern void __attribute__((overloadable))
3397349547db61d2d458b31c074b902d56d082e5d84Jason Sams    rsgDrawText(const char *, int x, int y);
3409996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk/**
3419996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk * \overload
3429996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk */
3437349547db61d2d458b31c074b902d56d082e5d84Jason Samsextern void __attribute__((overloadable))
3447349547db61d2d458b31c074b902d56d082e5d84Jason Sams    rsgDrawText(rs_allocation, int x, int y);
3459996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk/**
3469996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk * Binds the font object to be used for all subsequent font rendering calls
3479996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk * @param font object to bind
3489996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk */
3497349547db61d2d458b31c074b902d56d082e5d84Jason Samsextern void __attribute__((overloadable))
3509996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk    rsgBindFont(rs_font font);
3519996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk/**
3529996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk * Sets the font color for all subsequent rendering calls
3539996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk * @param r red component
3549996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk * @param g green component
3559996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk * @param b blue component
3569996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk * @param a alpha component
3579996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk */
3589fc9f0375a92fe22fecb3782b18a5c6060a07290Alex Sakhartchoukextern void __attribute__((overloadable))
3599996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk    rsgFontColor(float r, float g, float b, float a);
3609996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk/**
3619996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk * Returns the bounding box of the text relative to (0, 0)
3629996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk * Any of left, right, top, bottom could be NULL
3639996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk */
36409c67356bbeee0a97a20a06c95b66756838cb541Alex Sakhartchoukextern void __attribute__((overloadable))
36509c67356bbeee0a97a20a06c95b66756838cb541Alex Sakhartchouk    rsgMeasureText(const char *, int *left, int *right, int *top, int *bottom);
3669996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk/**
3679996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk * \overload
3689996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk */
36909c67356bbeee0a97a20a06c95b66756838cb541Alex Sakhartchoukextern void __attribute__((overloadable))
37009c67356bbeee0a97a20a06c95b66756838cb541Alex Sakhartchouk    rsgMeasureText(rs_allocation, int *left, int *right, int *top, int *bottom);
3719996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk/**
3729996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk * Computes an axis aligned bounding box of a mesh object
3739996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk */
374ba4aa5c768a498bc3fbb8cb5547b7a9ad6f4b771Alex Sakhartchoukextern void __attribute__((overloadable))
375ba4aa5c768a498bc3fbb8cb5547b7a9ad6f4b771Alex Sakhartchouk    rsgMeshComputeBoundingBox(rs_mesh mesh, float *minX, float *minY, float *minZ,
376ba4aa5c768a498bc3fbb8cb5547b7a9ad6f4b771Alex Sakhartchouk                                                float *maxX, float *maxY, float *maxZ);
3779996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk/**
3789996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk * \overload
3799996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk */
380399dc9ef2886a6c317a4c3c44173d582c5bc7d99Jason Sams__inline__ static void __attribute__((overloadable, always_inline))
381ba4aa5c768a498bc3fbb8cb5547b7a9ad6f4b771Alex SakhartchoukrsgMeshComputeBoundingBox(rs_mesh mesh, float3 *bBoxMin, float3 *bBoxMax) {
382ba4aa5c768a498bc3fbb8cb5547b7a9ad6f4b771Alex Sakhartchouk    float x1, y1, z1, x2, y2, z2;
383ba4aa5c768a498bc3fbb8cb5547b7a9ad6f4b771Alex Sakhartchouk    rsgMeshComputeBoundingBox(mesh, &x1, &y1, &z1, &x2, &y2, &z2);
384ba4aa5c768a498bc3fbb8cb5547b7a9ad6f4b771Alex Sakhartchouk    bBoxMin->x = x1;
385ba4aa5c768a498bc3fbb8cb5547b7a9ad6f4b771Alex Sakhartchouk    bBoxMin->y = y1;
386ba4aa5c768a498bc3fbb8cb5547b7a9ad6f4b771Alex Sakhartchouk    bBoxMin->z = z1;
387ba4aa5c768a498bc3fbb8cb5547b7a9ad6f4b771Alex Sakhartchouk    bBoxMax->x = x2;
388ba4aa5c768a498bc3fbb8cb5547b7a9ad6f4b771Alex Sakhartchouk    bBoxMax->y = y2;
389ba4aa5c768a498bc3fbb8cb5547b7a9ad6f4b771Alex Sakhartchouk    bBoxMax->z = z2;
390ba4aa5c768a498bc3fbb8cb5547b7a9ad6f4b771Alex Sakhartchouk}
391ba4aa5c768a498bc3fbb8cb5547b7a9ad6f4b771Alex Sakhartchouk
3921b937f5c0d66a65daf07a45554c98a9f2481b9baJason Sams#endif
39351f36ab783316b1c036bab4c3f7e0934dd564bd7Jason Sams
394