00001 /* 00002 Copyright (c) 2007-2009 Takashi Kitao 00003 All rights reserved. 00004 00005 Redistribution and use in source and binary forms, with or without 00006 modification, are permitted provided that the following conditions 00007 are met: 00008 00009 1. Redistributions of source code must retain the above copyright 00010 ` notice, this list of conditions and the following disclaimer. 00011 00012 2. Redistributions in binary form must reproduce the above copyright 00013 ` notice, this list of conditions and the following disclaimer in the 00014 ` documentation and/or other materials provided with the distribution. 00015 00016 3. The name of the author may not be used to endorse or promote products 00017 ` derived from this software without specific prior written permission. 00018 00019 THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR 00020 IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 00021 OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 00022 IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, 00023 INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 00024 NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 00025 DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 00026 THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 00027 (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 00028 THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 00029 */ 00030 00031 00036 class PG_API pgRend_Shader : public pgRend 00037 { 00038 public: 00039 void init(pgPrim* prim, pgID shd_id); 00040 void init(pgPrim* prim, r32* rend_data, pgID shd_id); 00041 00042 pgID getShaderID(); 00043 00044 pgID get2ndTextureID(); 00045 void set2ndTextureID(pgID tex_id); 00046 pgID get3rdTextureID(); 00047 void set3rdTextureID(pgID tex_id); 00048 00049 r32& uniform(u8 uni_index); 00050 void setUniformVec(u8 uni_index, const pgVec& vec); 00051 void setUniformCol3x255(u8 uni_index, pgCol col); 00052 void setUniformCol4x255(u8 uni_index, pgCol col); 00053 00054 r32& attrib(u16 data_index, u8 att_index); 00055 void setAttribVec(u16 data_index, u8 att_index, const pgVec& vec); 00056 void setAttribCol3x255(u16 data_index, u8 att_index, pgCol col); 00057 void setAttribCol4x255(u16 data_index, u8 att_index, pgCol col); 00058 00059 private: 00060 struct RendBody 00061 { 00062 pgShd* shd; 00063 pgTex* tex2; 00064 pgTex* tex3; 00065 r32* uni; 00066 r32* att; 00067 u32 rend_data_size; 00068 }; 00069 00070 virtual pgID getClassID(); 00071 virtual void initData(void* data, u16 data_num); 00072 virtual void render(const pgMat& view); 00073 };
1.5.8