![]() |
VR-Forces 4.0.4 Class Documentation
|
00001 /****************************************************************************** 00002 ** Copyright (c) 2010 MAK Technologies, Inc. 00003 ** All rights reserved. 00004 ******************************************************************************/ 00005 00009 00010 #pragma once 00011 00012 #include <vrvGraphics/DtFormatRenderer.h> 00013 #include <vrvGraphics/DtEffect.h> 00014 00015 namespace makVrv 00016 { 00017 template <typename MemberType> 00018 struct DtAttributeType; 00019 00020 template <> 00021 struct DtAttributeType<float> 00022 { 00023 enum { size = 1 }; 00024 enum { value = GL_FLOAT }; 00025 }; 00026 template <> 00027 struct DtAttributeType<float[2]> 00028 { 00029 enum { size = 2 }; 00030 enum { value = GL_FLOAT }; 00031 }; 00032 template <> 00033 struct DtAttributeType<float[3]> 00034 { 00035 enum { size = 3 }; 00036 enum { value = GL_FLOAT }; 00037 }; 00038 template <> 00039 struct DtAttributeType<float[4]> 00040 { 00041 enum { size = 4 }; 00042 enum { value = GL_FLOAT }; 00043 }; 00044 00045 template <> 00046 struct DtAttributeType<int> 00047 { 00048 enum { size = 1 }; 00049 enum { value = GL_INT }; 00050 }; 00051 template <> 00052 struct DtAttributeType<int[2]> 00053 { 00054 enum { size = 2 }; 00055 enum { value = GL_INT }; 00056 }; 00057 template <> 00058 struct DtAttributeType<int[3]> 00059 { 00060 enum { size = 3 }; 00061 enum { value = GL_INT }; 00062 }; 00063 template <> 00064 struct DtAttributeType<int[4]> 00065 { 00066 enum { size = 4 }; 00067 enum { value = GL_INT }; 00068 }; 00069 00070 template <> 00071 struct DtAttributeType<unsigned int> 00072 { 00073 enum { size = 1 }; 00074 enum { value = GL_UNSIGNED_INT }; 00075 }; 00076 template <> 00077 struct DtAttributeType<unsigned int[2]> 00078 { 00079 enum { size = 2 }; 00080 enum { value = GL_UNSIGNED_INT }; 00081 }; 00082 template <> 00083 struct DtAttributeType<unsigned int[3]> 00084 { 00085 enum { size = 3 }; 00086 enum { value = GL_UNSIGNED_INT }; 00087 }; 00088 template <> 00089 struct DtAttributeType<unsigned int[4]> 00090 { 00091 enum { size = 4 }; 00092 enum { value = GL_UNSIGNED_INT }; 00093 }; 00094 00095 class DtEffect; 00096 template <typename VertexFormat> 00097 class DtEffectRenderer : public DtFormatRenderer<VertexFormat> 00098 { 00099 public: 00100 00101 template <typename MemberType> 00102 static DtEffect::VaryingAttributeAddress VaryingAttribute( 00103 const VertexFormat* base, const MemberType VertexFormat::* member) 00104 { 00105 return DtEffect::VaryingAttributeAddress( 00106 reinterpret_cast<const GLvoid*>(&(base->*member)), 00107 DtAttributeType<MemberType>::value, 00108 DtAttributeType<MemberType>::size); 00109 } 00110 00111 DtEffectRenderer(DtEffect* effect) 00112 : myEffect(effect) 00113 { 00114 myEffect->enable(); 00115 } 00116 00117 virtual ~DtEffectRenderer() 00118 { 00119 if(myEffect->enabled()) 00120 { 00121 myEffect->disable(); 00122 } 00123 } 00124 00125 protected: 00126 DtEffect* myEffect; 00127 }; 00128 } 00129