d3d11u.h revision 11547654295cadcfde69f6c2361f50a4cd17fc7a
1656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project/************************************************************************** 2e45f106cb6b47af1f21efe76e933bdea2f5dd1caNagendra Modadugu * 3656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * Copyright 2010 Luca Barbieri 4656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * 5656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * Permission is hereby granted, free of charge, to any person obtaining 6656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * a copy of this software and associated documentation files (the 7656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * "Software"), to deal in the Software without restriction, including 8656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * without limitation the rights to use, copy, modify, merge, publish, 9656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * distribute, sublicense, and/or sell copies of the Software, and to 10656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * permit persons to whom the Software is furnished to do so, subject to 11656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * the following conditions: 12656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * 13656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * The above copyright notice and this permission notice (including the 14656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * next paragraph) shall be included in all copies or substantial 15656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * portions of the Software. 16656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * 17656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 18656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 19656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. 20656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * IN NO EVENT SHALL THE COPYRIGHT OWNER(S) AND/OR ITS SUPPLIERS BE 21656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION 22656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION 23656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 24656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * 25656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project **************************************************************************/ 26656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 27656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#include <vector> 28656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 29656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#include "d3d11blit.hlsl.ps.h" 30656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#include "d3d11blit.hlsl.vs.h" 31656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 32656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projecttemplate<typename index_type = unsigned> 33656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectstruct triangle_list_indices : public std::vector<index_type> 34656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project{ 35656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project unsigned base; 36656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project bool flip; 37656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 38656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project triangle_list_indices() 39656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project : base(0), flip(false) 40656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project {} 41656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 42656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project void poly(unsigned a, unsigned b, unsigned c) 43656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project { 44656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project this->push_back(base + a); 45656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project this->push_back(base + (flip ? c : b)); 46656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project this->push_back(base + (flip ? b : c)); 47656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project } 48656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 49656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project void poly(unsigned a, unsigned b, unsigned c, unsigned d) 50656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project { 51656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project poly(a, b, c); 52656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project poly(a, c, d); 53656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project } 54656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 55656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project void poly(unsigned a, unsigned b, unsigned c, unsigned d, unsigned e) 56656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project { 57656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project poly(a, b, c, d); 58656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project poly(a, d, e); 59656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project } 60656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 61656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project void poly(unsigned a, unsigned b, unsigned c, unsigned d, unsigned e, unsigned f) 62656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project { 63e45f106cb6b47af1f21efe76e933bdea2f5dd1caNagendra Modadugu poly(a, b, c, d, e); 64e45f106cb6b47af1f21efe76e933bdea2f5dd1caNagendra Modadugu poly(a, e, f); 65656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project } 66656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 67656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project void poly(unsigned a, unsigned b, unsigned c, unsigned d, unsigned e, unsigned f, unsigned g) 68656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project { 69656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project poly(a, b, c, d, e, f); 70656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project poly(a, f, g); 71656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project } 72656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 73656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project void poly(unsigned a, unsigned b, unsigned c, unsigned d, unsigned e, unsigned f, unsigned g, unsigned h) 74656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project { 75656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project poly(a, b, c, d, e, f, g); 76656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project poly(a, g, h); 77656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project } 78656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project}; 79656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 80656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectstruct mesh 81656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project{ 82656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ID3D11InputLayout* layout; 83656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ID3D11Buffer* buffer; 84656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project D3D11_PRIMITIVE_TOPOLOGY topology; 85656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project unsigned vertex_size; 86656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project unsigned draw_count; 87656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project DXGI_FORMAT index_format; 88656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project unsigned index_offset; 89656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 90656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project mesh(ID3D11Device* dev, D3D11_PRIMITIVE_TOPOLOGY topology, 91656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project const D3D11_INPUT_ELEMENT_DESC *elements, unsigned num_elements, 92656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project const void* vs, unsigned vs_size, 93656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project const void* vertices, unsigned vertex_size, unsigned num_vertices, 94656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project const void* indices = 0, unsigned index_size = 0, unsigned num_indices = 0) 95656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project : topology(topology), vertex_size(vertex_size), draw_count(index_size ? num_indices : num_vertices) 96656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project { 97656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project dev->CreateInputLayout(elements, num_elements, vs, vs_size, &layout); 98656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project if(index_size == 2) 99656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project index_format = DXGI_FORMAT_R16_UINT; 100656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project else if(index_size == 4) 101656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project index_format = DXGI_FORMAT_R32_UINT; 102656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project else 103656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project index_format = DXGI_FORMAT_UNKNOWN; 104656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project this->vertex_size = vertex_size; 105656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project index_offset = vertex_size * num_vertices; 106656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 107656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project D3D11_BUFFER_DESC bufferd; 108656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project memset(&bufferd, 0, sizeof(bufferd)); 109656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project bufferd.Usage = D3D11_USAGE_IMMUTABLE; 110656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project bufferd.BindFlags = D3D11_BIND_VERTEX_BUFFER; 111656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project if(index_format) 112656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project bufferd.BindFlags |= D3D11_BIND_INDEX_BUFFER; 113656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project bufferd.ByteWidth = index_offset + index_format * num_indices; 114656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 115656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project char* data = (char*)malloc(bufferd.ByteWidth); 116656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project memcpy(data, vertices, vertex_size * num_vertices); 117656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project memcpy(data + index_offset, indices, index_size * num_indices); 118656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 119656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project D3D11_SUBRESOURCE_DATA buffersd; 120656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project buffersd.pSysMem = data; 121221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom 122656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ensure(dev->CreateBuffer(&bufferd, &buffersd, &buffer)); 123221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom free(data); 124656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project } 125656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 126221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom ~mesh() 127221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom { 128221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom layout->Release(); 129221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom buffer->Release(); 130221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom } 131221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom 132221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom void bind(ID3D11DeviceContext* ctx) 133221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom { 134221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom unsigned offset = 0; 135221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom ctx->IASetPrimitiveTopology(topology); 136221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom ctx->IASetInputLayout(layout); 137221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom if(index_format) 138221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom ctx->IASetIndexBuffer(buffer, index_format, index_offset); 139221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom ctx->IASetVertexBuffers(0, 1, &buffer, &vertex_size, &offset); 140221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom } 141221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom 142221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom void draw_bound(ID3D11DeviceContext* ctx) 143221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom { 144221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom if(index_format) 145221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom ctx->DrawIndexed(draw_count, 0, 0); 146221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom else 147221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom ctx->Draw(draw_count, 0); 148221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom } 149221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom 150221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom void bind_and_draw(ID3D11DeviceContext* ctx) 151221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom { 152221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom bind(ctx); 153221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom draw_bound(ctx); 154221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom } 155221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom}; 156221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom 157221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrommesh* create_tex_quad(ID3D11Device* dev, const BYTE* vs, unsigned vs_size) 158656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project{ 159656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project float quad_data[] = { 160656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project -1, -1, 0, 1, 161221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom -1, 1, 0, 0, 162656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 1, -1, 1, 1, 163656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 1, 1, 1, 0, 164221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom }; 165656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 166656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project D3D11_INPUT_ELEMENT_DESC elements[2] = 167656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project { 168656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project {"POSITION", 0, DXGI_FORMAT_R32G32_FLOAT, 0, 0, D3D11_INPUT_PER_VERTEX_DATA, 0}, 169656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project {"TEXCOORD", 0, DXGI_FORMAT_R32G32_FLOAT, 0, 8, D3D11_INPUT_PER_VERTEX_DATA, 0}, 170221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom }; 171221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom 172656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project return new mesh(dev, D3D11_PRIMITIVE_TOPOLOGY_TRIANGLESTRIP, 173656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project elements, 2, 174656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project vs, vs_size, 175221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom quad_data, 4 * sizeof(float), 4, 176656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0, 0, 0); 177221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom} 178221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom 179656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectstruct d3d11_blitter 180656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project{ 181656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project mesh* quad; 182656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ID3D11VertexShader* vs; 183656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ID3D11PixelShader* ps; 184656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ID3D11SamplerState* sampler[2]; 185656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 186656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project d3d11_blitter(ID3D11Device* dev) 187656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project { 188656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project quad = create_tex_quad(dev, g_vs_blit, sizeof(g_vs_blit)); 189656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 190656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project dev->CreateVertexShader(g_vs_blit, sizeof(g_vs_blit), 0, &vs); 191656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project dev->CreatePixelShader(g_ps_blit, sizeof(g_ps_blit), 0, &ps); 192656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 193656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project for(unsigned i = 0; i < 2; ++i) 194656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project { 195656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project D3D11_SAMPLER_DESC samplerd; 196656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project memset(&samplerd, 0, sizeof(samplerd)); 197656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project samplerd.Filter = i ? D3D11_FILTER_MIN_MAG_MIP_LINEAR : D3D11_FILTER_MIN_MAG_MIP_LINEAR; 198656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project samplerd.AddressU = samplerd.AddressV = samplerd.AddressW = D3D11_TEXTURE_ADDRESS_CLAMP; 199656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project dev->CreateSamplerState(&samplerd, &sampler[i]); 200656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project } 201656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project } 202656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 203656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project void bind(ID3D11DeviceContext* ctx, ID3D11ShaderResourceView* srv, ID3D11RenderTargetView* rtv, float x, float y, float width, float height, bool linear) 204656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project { 205656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project D3D11_VIEWPORT vp; 206656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project vp.TopLeftX = x; 207656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project vp.TopLeftY = y; 208656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project vp.Width = width; 209656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project vp.Height = height; 210656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project vp.MinDepth = 0; 211656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project vp.MaxDepth = 1; 212656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ctx->RSSetViewports(1, &vp); 213656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ctx->RSSetState(0); 214656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ctx->OMSetBlendState(0, 0, ~0); 215656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ctx->OMSetDepthStencilState(0, 0); 216656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ctx->OMSetRenderTargets(1, &rtv, 0); 217656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ctx->VSSetShader(vs, 0, 0); 218656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ctx->PSSetShader(ps, 0, 0); 219656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ctx->PSSetShaderResources(0, 1, &srv); 220656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ctx->PSSetSamplers(0, 1, &sampler[!!linear]); 221656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project quad->bind(ctx); 222656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project } 223656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 224656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project void draw_bound(ID3D11DeviceContext* ctx) 225656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project { 226656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project quad->draw_bound(ctx); 227656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project } 228656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 229656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project void bind_draw_and_unbind(ID3D11DeviceContext* ctx, ID3D11ShaderResourceView* srv, ID3D11RenderTargetView* rtv, float x, float y, float width, float height, bool linear) 230656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project { 231656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project bind(ctx, srv, rtv, x, y, width, height, linear); 232656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project draw_bound(ctx); 233656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project unbind(ctx); 234656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project } 235656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 236656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project void unbind(ID3D11DeviceContext* ctx) 237656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project { 238656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project void* null = 0; 239656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ctx->PSSetShaderResources(0, 1, (ID3D11ShaderResourceView**)&null); 240656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ctx->PSSetSamplers(0, 1, (ID3D11SamplerState**)&null); 241656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project } 242656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project}; 243656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 244656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projecttemplate<typename T, unsigned n> 245656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectstruct vec_t 246656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project{ 247656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project T v[n]; 248656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 249656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project T& operator [](unsigned i) 250656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project { 251656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project return v[i]; 252656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project } 253656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 254656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project const T& operator [](unsigned i) const 255656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project { 256656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project return v[i]; 257656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project } 258656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project}; 259656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 260656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projecttemplate<typename T, unsigned n> 261656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectvec_t<T, n> operator -(const vec_t<T, n> a) 262656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project{ 263656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project vec_t<T, n> r; 264656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project for(unsigned i = 0; i < n; ++i) 265656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project r[i] = -a[i]; 266656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project return r; 267656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project} 268656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 269656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projecttemplate<typename T, unsigned n> 270656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectvec_t<T, n> operator +(const vec_t<T, n>& a, const vec_t<T, n>& b) 271656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project{ 272656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project vec_t<T, n> r; 273656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project for(unsigned i = 0; i < n; ++i) 274656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project r[i] = a[i] + b[i]; 275656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project return r; 276656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project} 277656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 278656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projecttemplate<typename T, unsigned n> 279656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectvec_t<T, n>& operator +=(vec_t<T, n>& a, const vec_t<T, n>& b) 280656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project{ 281656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project for(unsigned i = 0; i < n; ++i) 282656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project a[i] += b[i]; 283656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project return a; 284656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project} 285656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 286656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projecttemplate<typename T, unsigned r, unsigned c> 287656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectstruct mat_t : public vec_t<vec_t<T, r>, c> 288656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project{}; 289656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 290656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projecttemplate<typename T, unsigned n> 291656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectvec_t<T, n> operator *(const vec_t<T, n>& a, const T& b) 292656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project{ 293656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project vec_t<T, n> r; 294656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project for(unsigned i = 0; i < n; ++i) 295656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project r[i] = a[i] * b; 296656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project return r; 297656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project} 298656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 299656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projecttemplate<typename T, unsigned n> 300656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectvec_t<T, n> operator *(const T& b, const vec_t<T, n>& a) 301656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project{ 302656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project vec_t<T, n> r; 303656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project for(unsigned i = 0; i < n; ++i) 304656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project r[i] = a[i] * b; 305656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project return r; 306656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project} 307656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 308656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projecttemplate<typename T, unsigned d, unsigned e> 309656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectvec_t<T, e> operator *(const mat_t<T, e, d>& m, const vec_t<T, d>& b) 310656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project{ 311656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project vec_t<T, e> r; 312656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project r = m[0] * b[0]; 313656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project for(unsigned i = 1; i < d; ++i) 314656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project r += m[i] * b[i]; 315656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project return r; 316656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project} 317656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 318656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projecttemplate<typename T, unsigned d, unsigned e, unsigned f> 319656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectmat_t<T, e, f> operator *(const mat_t<T, e, d>& m, const mat_t<T, d, f>& b) 320656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project{ 321656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project mat_t<T, e, f> r; 322656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project for(unsigned i = 0; i < d; ++i) 323656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project r[i] = m * b[i]; 324656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project return r; 325656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project} 326656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 327656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projecttemplate<typename T> 328656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectvec_t<T, 3> vec(T a, T b, T c) 329656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project{ 330656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project vec_t<T, 4> v; 331656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project v[0] = a; 332656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project v[1] = b; 333656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project v[2] = c; 334656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project return v; 335656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project} 336656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 337656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projecttemplate<typename T> 338656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectvec_t<T, 4> vec(T a, T b, T c, T d) 339656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project{ 340656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project vec_t<T, 4> v; 341656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project v[0] = a; 342656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project v[1] = b; 343656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project v[2] = c; 344656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project v[3] = d; 345656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project return v; 346656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project} 347656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 348656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projecttypedef mat_t<float, 4, 4> float4x4; 349656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projecttypedef mat_t<float, 4, 3> float4x3; 350656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projecttypedef mat_t<float, 3, 4> float3x4; 351656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projecttypedef mat_t<float, 3, 3> float3x3; 352656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 353656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projecttypedef vec_t<float, 3> float3; 354656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projecttypedef vec_t<float, 4> float4; 355656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 356656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projecttemplate<typename T> 357656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectmat_t<T, 4, 4> mat4x4_frustum(T left, T right, T bottom, T top, T nearval, T farval) 358656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project{ 359656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project T x = (2.0f * nearval) / (right - left); 360656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project T y = (2.0f * nearval) / (top - bottom); 361656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project T a = (right + left) / (right - left); 362656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project T b = (top + bottom) / (top - bottom); 363656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project T c = -(farval + nearval) / (farval - nearval); 364656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project T d = -(2.0f * farval * nearval) / (farval - nearval); 365656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project T _0 = (T)0; 366656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 367656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project mat_t<T, 4, 4> m; 368656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project m[0] = vec(x, _0, _0, _0); 369656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project m[1] = vec(_0, y, _0, _0); 370656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project m[2] = vec(a, b, c, (T)-1); 371656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project m[3] = vec(_0, _0, d, _0); 372656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project return m; 373656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project} 374656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 375656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projecttemplate<typename T> 376656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectmat_t<T, 3, 3> mat3x3_diag(T v) 377656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project{ 378656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project mat_t<T, 3, 3> m; 379656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project T _0 = (T)0; 380656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project m[0] = vec(v, _0, _0); 381656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project m[1] = vec(_0, v, _0); 382656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project m[2] = vec(_0, _0, v); 383656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project return m; 384656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project} 385656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 386656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projecttemplate<typename T> 387656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectmat_t<T, 4, 4> mat4x4_diag(T v) 388656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project{ 389656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project mat_t<T, 4, 4> m; 390656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project T _0 = (T)0; 391656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project m[0] = vec(v, _0, _0, _0); 392656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project m[1] = vec(_0, v, _0, _0); 393656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project m[2] = vec(_0, _0, v, _0); 394656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project m[3] = vec(_0, _0, _0, v); 395656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project return m; 396656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project} 397656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 398656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projecttemplate<typename T, unsigned n> 399656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectmat_t<T, n, n> mat_push_rotate(const mat_t<T, n, n>& m, unsigned axis, T angle) 40043c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom{ 40143c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom T s = (T)sin(angle); 40243c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom T c = (T)cos(angle); 403656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 404656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project mat_t<T, n, n> r = m; 40543c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom unsigned a = (axis + 1) % 3; 406656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project unsigned b = (axis + 2) % 3; 407656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project r[a] = (m[a] * c) + (m[b] * s); 408656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project r[b] = -(m[a] * s) + (m[b] * c); 409656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project return r; 410656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project} 411656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 412656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projecttemplate<typename T, unsigned n> 413656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectmat_t<T, n, n> mat_push_translate(const mat_t<T, n, n>& m, float x, float y, float z) 414656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project{ 415656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project mat_t<T, n, n> r = m; 416656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project vec_t<T, n> v; 417656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project v[0] = x; 41843c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom v[1] = y; 41943c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom v[2] = z; 42043c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom if(n >= 4) 42143c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom v[3] = (T)0; 42243c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom r[3] += m * v; 423656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project return r; 424656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project} 425656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project