/* * Copyright 2011-2013 Branimir Karadzic. All rights reserved. * License: http://www.opensource.org/licenses/BSD-2-Clause */ #ifndef __BGFX_H__ #define __BGFX_H__ #include // uint32_t #include // size_t /// #define BGFX_STATE_DEPTH_WRITE UINT64_C(0x0000000000000001) #define BGFX_STATE_ALPHA_WRITE UINT64_C(0x0000000000000008) #define BGFX_STATE_ALPHA_MASK UINT64_C(0x000000000000000c) #define BGFX_STATE_DEPTH_TEST_LESS UINT64_C(0x0000000000000010) #define BGFX_STATE_DEPTH_TEST_LEQUAL UINT64_C(0x0000000000000020) #define BGFX_STATE_DEPTH_TEST_EQUAL UINT64_C(0x0000000000000030) #define BGFX_STATE_DEPTH_TEST_GEQUAL UINT64_C(0x0000000000000040) #define BGFX_STATE_DEPTH_TEST_GREATER UINT64_C(0x0000000000000050) #define BGFX_STATE_DEPTH_TEST_NOTEQUAL UINT64_C(0x0000000000000060) #define BGFX_STATE_DEPTH_TEST_NEVER UINT64_C(0x0000000000000070) #define BGFX_STATE_DEPTH_TEST_ALWAYS UINT64_C(0x0000000000000080) #define BGFX_STATE_DEPTH_TEST_SHIFT 4 #define BGFX_STATE_DEPTH_TEST_MASK UINT64_C(0x00000000000000f0) #define BGFX_STATE_BLEND_ZERO UINT64_C(0x0000000000001000) #define BGFX_STATE_BLEND_ONE UINT64_C(0x0000000000002000) #define BGFX_STATE_BLEND_SRC_COLOR UINT64_C(0x0000000000003000) #define BGFX_STATE_BLEND_INV_SRC_COLOR UINT64_C(0x0000000000004000) #define BGFX_STATE_BLEND_SRC_ALPHA UINT64_C(0x0000000000005000) #define BGFX_STATE_BLEND_INV_SRC_ALPHA UINT64_C(0x0000000000006000) #define BGFX_STATE_BLEND_DST_ALPHA UINT64_C(0x0000000000007000) #define BGFX_STATE_BLEND_INV_DST_ALPHA UINT64_C(0x0000000000008000) #define BGFX_STATE_BLEND_DST_COLOR UINT64_C(0x0000000000009000) #define BGFX_STATE_BLEND_INV_DST_COLOR UINT64_C(0x000000000000a000) #define BGFX_STATE_BLEND_SRC_ALPHA_SAT UINT64_C(0x000000000000b000) #define BGFX_STATE_BLEND_FACTOR UINT64_C(0x000000000000c000) #define BGFX_STATE_BLEND_INV_FACTOR UINT64_C(0x000000000000d000) #define BGFX_STATE_BLEND_SHIFT 12 #define BGFX_STATE_BLEND_MASK UINT64_C(0x00000000000ff000) #define BGFX_STATE_BLEND_EQUATION_SUB UINT64_C(0x0000000000100000) #define BGFX_STATE_BLEND_EQUATION_REVSUB UINT64_C(0x0000000000200000) #define BGFX_STATE_BLEND_EQUATION_MIN UINT64_C(0x0000000000300000) #define BGFX_STATE_BLEND_EQUATION_MAX UINT64_C(0x0000000000400000) #define BGFX_STATE_BLEND_EQUATION_SHIFT 20 #define BGFX_STATE_BLEND_EQUATION_MASK UINT64_C(0x0000000000700000) #define BGFX_STATE_CULL_CW UINT64_C(0x0000000010000000) #define BGFX_STATE_CULL_CCW UINT64_C(0x0000000020000000) #define BGFX_STATE_CULL_SHIFT 28 #define BGFX_STATE_CULL_MASK UINT64_C(0x0000000030000000) #define BGFX_STATE_RGB_WRITE UINT64_C(0x0000000040000000) #define BGFX_STATE_ALPHA_REF_SHIFT 32 #define BGFX_STATE_ALPHA_REF_MASK UINT64_C(0x000000ff00000000) #define BGFX_STATE_PT_LINES UINT64_C(0x0000010000000000) #define BGFX_STATE_PT_POINTS UINT64_C(0x0000020000000000) #define BGFX_STATE_PT_SHIFT 40 #define BGFX_STATE_PT_MASK UINT64_C(0x0000030000000000) #define BGFX_STATE_POINT_SIZE_SHIFT 44 #define BGFX_STATE_POINT_SIZE_MASK UINT64_C(0x000ff00000000000) #define BGFX_STATE_MSAA UINT64_C(0x0020000000000000) #define BGFX_STATE_RESERVED_MASK UINT64_C(0xff00000000000000) #define BGFX_STATE_NONE UINT64_C(0x0000000000000000) #define BGFX_STATE_MASK UINT64_C(0xffffffffffffffff) #define BGFX_STATE_DEFAULT (0 \ | BGFX_STATE_RGB_WRITE \ | BGFX_STATE_ALPHA_WRITE \ | BGFX_STATE_DEPTH_TEST_LESS \ | BGFX_STATE_DEPTH_WRITE \ | BGFX_STATE_CULL_CW \ | BGFX_STATE_MSAA \ ) #define BGFX_STATE_ALPHA_REF(_ref) ( (uint64_t(_ref)<+x | /// +----------+----------+----------+----------+ /// |+y 1|+y 4|+y 0|+y 5| /// | ^ -x | ^ +z | ^ +x | ^ -z | /// | | | | | | | | | /// | +---->+z | +---->+x | +---->-z | +---->-x | /// +----------+----------+----------+----------+ /// |+z 3| /// | ^ -y | /// | | | /// | +---->+x | /// +----------+ /// void updateTextureCube(TextureHandle _handle, uint8_t _side, uint8_t _mip, uint16_t _x, uint16_t _y, uint16_t _width, uint16_t _height, const Memory* _mem); /// Destroy texture. void destroyTexture(TextureHandle _handle); /// Create render target. RenderTargetHandle createRenderTarget(uint16_t _width, uint16_t _height, uint32_t _flags = BGFX_RENDER_TARGET_COLOR_RGBA8, uint32_t _textureFlags = BGFX_TEXTURE_U_CLAMP|BGFX_TEXTURE_V_CLAMP); /// Destroy render target. void destroyRenderTarget(RenderTargetHandle _handle); /// Create shader uniform parameter. /// /// @param _name Uniform name in shader. /// @param _type Type of uniform (See: UniformType). /// @param _num Number of elements in array. /// /// Predefined uniforms: /// /// u_viewRect vec4(x, y, width, height) - view rectangle for current /// view. /// /// u_viewTexel vec4(1.0/width, 1.0/height, undef, undef) - inverse /// width and height /// /// u_view mat4 - view matrix /// /// u_viewProj mat4 - concatenated view projection matrix /// /// u_model mat4[BGFX_CONFIG_MAX_BONES] - array of model matrices. /// /// u_modelView mat4 - concatenated model view matrix, only first /// model matrix from array is used. /// /// u_modelViewProj mat4 - concatenated model view projection matrix. /// /// u_alphaRef float - alpha reference value for alpha test. /// UniformHandle createUniform(const char* _name, UniformType::Enum _type, uint16_t _num = 1); /// Destroy shader uniform parameter. void destroyUniform(UniformHandle _handle); /// Set view name. /// /// @param _id View id. /// @param _name View name. /// /// NOTE: /// This is debug only feature. /// void setViewName(uint8_t _id, const char* _name); /// Set view rectangle. Draw primitive outside view will be clipped. void setViewRect(uint8_t _id, uint16_t _x, uint16_t _y, uint16_t _width, uint16_t _height); /// Set view rectangle for multiple views. void setViewRectMask(uint32_t _viewMask, uint16_t _x, uint16_t _y, uint16_t _width, uint16_t _height); /// Set view scissor. Draw primitive outside view will be clipped. When /// _x, _y, _width and _height are set to 0, scissor will be disabled. void setViewScissor(uint8_t _id, uint16_t _x = 0, uint16_t _y = 0, uint16_t _width = 0, uint16_t _height = 0); /// Set view scissor for multiple views. When _x, _y, _width and _height /// are set to 0, scissor will be disabled. void setViewScissorMask(uint32_t _viewMask, uint16_t _x = 0, uint16_t _y = 0, uint16_t _width = 0, uint16_t _height = 0); /// Set view clear flags. /// /// @param _id View id. /// @param _flags Clear flags. Use BGFX_CLEAR_NONE to remove any clear /// operation. See: BGFX_CLEAR_*. /// @param _rgba Color clear value. /// @param _depth Depth clear value. /// @param _stencil Stencil clear value. /// void setViewClear(uint8_t _id, uint8_t _flags, uint32_t _rgba = 0x000000ff, float _depth = 1.0f, uint8_t _stencil = 0); /// Set view clear flags for multiple views. void setViewClearMask(uint32_t _viewMask, uint8_t _flags, uint32_t _rgba = 0x000000ff, float _depth = 1.0f, uint8_t _stencil = 0); /// Set view into sequential mode. Draw calls will be sorted in the same /// order in which submit calls were called. void setViewSeq(uint8_t _id, bool _enabled); /// Set mulitple views into sequential mode. void setViewSeqMask(uint32_t _viewMask, bool _enabled); /// Set view render target. /// /// @param _id View id. /// @param _handle Render target handle. Passing BGFX_INVALID_HANDLE as /// render target handle will draw primitives from this view into /// default backbuffer. /// void setViewRenderTarget(uint8_t _id, RenderTargetHandle _handle); /// Set view render target for multiple views. /// /// @param _viewMask View mask. /// @param _handle Render target handle. Passing BGFX_INVALID_HANDLE as /// render target handle will draw primitives from this view into /// default backbuffer. /// void setViewRenderTargetMask(uint32_t _viewMask, RenderTargetHandle _handle); /// Set view view and projection matrices, all draw primitives in this /// view will use these matrices. void setViewTransform(uint8_t _id, const void* _view, const void* _proj, uint8_t _other = 0xff); /// Set view view and projection matrices for multiple views. void setViewTransformMask(uint32_t _viewMask, const void* _view, const void* _proj, uint8_t _other = 0xff); /// Sets debug marker. void setMarker(const char* _marker); /// Set render states for draw primitive. /// /// @param _state State flags. Default state for primitive type is /// triangles. See: BGFX_STATE_DEFAULT. /// /// BGFX_STATE_ALPHA_WRITE - Enable alpha write. /// BGFX_STATE_DEPTH_WRITE - Enable depth write. /// BGFX_STATE_DEPTH_TEST_* - Depth test function. /// BGFX_STATE_BLEND_* - See NOTE 1: BGFX_STATE_BLEND_FUNC. /// BGFX_STATE_BLEND_EQUATION_* - See NOTE 2. /// BGFX_STATE_CULL_* - Backface culling mode. /// BGFX_STATE_RGB_WRITE - Enable RGB write. /// BGFX_STATE_MSAA - Enable MSAA. /// BGFX_STATE_PT_[LINES/POINTS] - Primitive type. /// /// @param _rgba Sets blend factor used by BGFX_STATE_BLEND_FACTOR and /// BGFX_STATE_BLEND_INV_FACTOR blend modes. /// /// NOTE: /// 1. Use BGFX_STATE_ALPHA_REF, BGFX_STATE_POINT_SIZE and /// BGFX_STATE_BLEND_FUNC macros to setup more complex states. /// 2. BGFX_STATE_BLEND_EQUATION_ADD is set when no other blend /// equation is specified. /// void setState(uint64_t _state, uint32_t _rgba = UINT32_MAX); /// Set stencil test state. /// /// @param _fstencil Front stencil state. /// @param _bstencil Back stencil state. If back is set to BGFX_STENCIL_NONE /// _fstencil is applied to both front and back facing primitives. /// void setStencil(uint32_t _fstencil, uint32_t _bstencil = BGFX_STENCIL_NONE); /// Set scissor for draw primitive. uint16_t setScissor(uint16_t _x, uint16_t _y, uint16_t _width, uint16_t _height); /// Set scissor from cache for draw primitive. /// /// @param _cache Index in scissor cache. Passing UINT16_MAX unset primitive /// scissor and primitive will use view scissor instead. /// void setScissor(uint16_t _cache = UINT16_MAX); /// Set model matrix for draw primitive. If it is not called model will /// be rendered with identity model matrix. /// /// @param _mtx Pointer to first matrix in array. /// @param _num Number of matrices in array. /// @returns index into matrix cache in case the same model matrix has /// to be used for other draw primitive call. /// uint32_t setTransform(const void* _mtx, uint16_t _num = 1); /// Set model matrix from matrix cache for draw primitive. /// /// @param _cache Index in matrix cache. /// @param _num Number of matrices from cache. /// void setTransform(uint32_t _cache, uint16_t _num = 1); /// Set shader uniform parameter for draw primitive. void setUniform(UniformHandle _handle, const void* _value, uint16_t _num = 1); /// Set index buffer for draw primitive. void setIndexBuffer(IndexBufferHandle _handle, uint32_t _firstIndex = 0, uint32_t _numIndices = UINT32_MAX); /// Set index buffer for draw primitive. void setIndexBuffer(DynamicIndexBufferHandle _handle, uint32_t _firstIndex = 0, uint32_t _numIndices = UINT32_MAX); /// Set index buffer for draw primitive. void setIndexBuffer(const TransientIndexBuffer* _tib, uint32_t _numIndices = UINT32_MAX); /// Set vertex buffer for draw primitive. void setVertexBuffer(VertexBufferHandle _handle, uint32_t _numVertices = UINT32_MAX); /// Set vertex buffer for draw primitive. void setVertexBuffer(DynamicVertexBufferHandle _handle, uint32_t _numVertices = UINT32_MAX); /// Set vertex buffer for draw primitive. void setVertexBuffer(const TransientVertexBuffer* _tvb, uint32_t _numVertices = UINT32_MAX); /// Set instance data buffer for draw primitive. void setInstanceDataBuffer(const InstanceDataBuffer* _idb, uint16_t _num = UINT16_MAX); /// Set program for draw primitive. void setProgram(ProgramHandle _handle); /// Set texture stage for draw primitive. /// /// @param _stage Texture unit. /// @param _sampler Program sampler. /// @param _handle Texture handle. /// @param _flags Texture sampling mode. Default value UINT32_MAX uses /// texture sampling settings from the texture. /// /// BGFX_TEXTURE_[U/V/W]_[MIRROR/CLAMP] - Mirror or clamp to edge wrap /// mode. /// /// BGFX_TEXTURE_[MIN/MAG/MIP]_[POINT/ANISOTROPIC] - Point or anisotropic /// sampling. /// /// @param _flags Texture sampler filtering flags. UINT32_MAX use the /// sampler filtering mode set by texture. /// void setTexture(uint8_t _stage, UniformHandle _sampler, TextureHandle _handle, uint32_t _flags = UINT32_MAX); /// Set texture stage for draw primitive. /// /// @param _stage Texture unit. /// @param _sampler Program sampler. /// @param _handle Render target handle. /// @param _flags Texture sampling mode. Default value UINT32_MAX uses /// texture sampling settings from the texture. /// /// BGFX_TEXTURE_[U/V/W]_[MIRROR/CLAMP] - Mirror or clamp to edge wrap /// mode. /// /// BGFX_TEXTURE_[MIN/MAG/MIP]_[POINT/ANISOTROPIC] - Point or anisotropic /// sampling. /// void setTexture(uint8_t _stage, UniformHandle _sampler, RenderTargetHandle _handle, bool _depth = false, uint32_t _flags = UINT32_MAX); /// Submit primitive for rendering into single view. /// /// @param _id View id. /// @param _depth Depth for sorting. /// void submit(uint8_t _id, int32_t _depth = 0); /// Submit primitive for rendering into multiple views. /// /// @param _viewMask Mask to which views to submit draw primitive calls. /// @param _depth Depth for sorting. /// void submitMask(uint32_t _viewMask, int32_t _depth = 0); /// Discard all previously set state for draw call. void discard(); /// Request screen shot. /// /// @param _filePath Will be passed to CallbackI::screenShot callback. /// /// NOTE: /// CallbackI::screenShot must be implemented. /// void saveScreenShot(const char* _filePath); } // namespace bgfx #endif // __BGFX_H__