/opengles/src/ContextMaterial.cpp

http://ftk.googlecode.com/ · C++ · 148 lines · 79 code · 29 blank · 40 comment · 14 complexity · 86caac3435153b42c5c91468e4138cde MD5 · raw file

  1. // ==========================================================================
  2. //
  3. // ContextMaterial.cpp Rendering Context Class for 3D Rendering Library
  4. //
  5. // Material related settings
  6. //
  7. // --------------------------------------------------------------------------
  8. //
  9. // 08-02-2003 Hans-Martin Will initial version
  10. //
  11. // --------------------------------------------------------------------------
  12. //
  13. // Copyright (c) 2004, Hans-Martin Will. All rights reserved.
  14. //
  15. // Redistribution and use in source and binary forms, with or without
  16. // modification, are permitted provided that the following conditions are
  17. // met:
  18. //
  19. // * Redistributions of source code must retain the above copyright
  20. // notice, this list of conditions and the following disclaimer.
  21. // * Redistributions in binary form must reproduce the above copyright
  22. // notice, this list of conditions and the following disclaimer in the
  23. // documentation and/or other materials provided with the distribution.
  24. //
  25. // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
  26. // AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  27. // IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  28. // ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
  29. // LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
  30. // OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
  31. // SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
  32. // INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
  33. // CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
  34. // ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
  35. // THE POSSIBILITY OF SUCH DAMAGE.
  36. //
  37. // ==========================================================================
  38. #include "stdafx.h"
  39. #include "Context.h"
  40. #include "RasterizerState.h"
  41. #include "Utils.h"
  42. using namespace EGL;
  43. // ==========================================================================
  44. // Material Functions on Context
  45. // ==========================================================================
  46. void Context :: Materialx(GLenum face, GLenum pname, GLfixed param) {
  47. if (face != GL_FRONT_AND_BACK) {
  48. RecordError(GL_INVALID_ENUM);
  49. return;
  50. }
  51. Material * material = &m_FrontMaterial;
  52. switch (pname) {
  53. case GL_SHININESS:
  54. if (param < 0 || param > EGL_FixedFromInt(128)) {
  55. RecordError(GL_INVALID_VALUE);
  56. } else {
  57. material->SetSpecularExponent(param);
  58. }
  59. break;
  60. default:
  61. RecordError(GL_INVALID_ENUM);
  62. return;
  63. }
  64. }
  65. void Context :: Materialxv(GLenum face, GLenum pname, const GLfixed *params) {
  66. if (face != GL_FRONT_AND_BACK) {
  67. RecordError(GL_INVALID_ENUM);
  68. return;
  69. }
  70. Material * material = &m_FrontMaterial;
  71. switch (pname) {
  72. case GL_AMBIENT:
  73. material->SetAmbientColor(FractionalColor::Clamp(params));
  74. break;
  75. case GL_DIFFUSE:
  76. material->SetDiffuseColor(FractionalColor::Clamp(params));
  77. break;
  78. case GL_AMBIENT_AND_DIFFUSE:
  79. material->SetAmbientColor(FractionalColor::Clamp(params));
  80. material->SetDiffuseColor(FractionalColor::Clamp(params));
  81. break;
  82. case GL_SPECULAR:
  83. material->SetSpecularColor(FractionalColor::Clamp(params));
  84. break;
  85. case GL_EMISSION:
  86. material->SetEmissiveColor(FractionalColor::Clamp(params));
  87. break;
  88. default:
  89. Materialx(face, pname, *params);
  90. break;
  91. }
  92. }
  93. bool Context :: GetMaterialxv(GLenum face, GLenum pname, GLfixed *params) {
  94. if (face != GL_FRONT && face != GL_BACK) {
  95. RecordError(GL_INVALID_ENUM);
  96. return false;
  97. }
  98. switch (pname) {
  99. case GL_AMBIENT:
  100. CopyColor(m_FrontMaterial.GetAmbientColor(), params);
  101. break;
  102. case GL_DIFFUSE:
  103. CopyColor(m_FrontMaterial.GetDiffuseColor(), params);
  104. break;
  105. case GL_SPECULAR:
  106. CopyColor(m_FrontMaterial.GetSpecularColor(), params);
  107. break;
  108. case GL_EMISSION:
  109. CopyColor(m_FrontMaterial.GetEmissiveColor(), params);
  110. break;
  111. case GL_SHININESS:
  112. params[0] = m_FrontMaterial.GetSpecularExponent();
  113. break;
  114. default:
  115. RecordError(GL_INVALID_ENUM);
  116. return false;
  117. }
  118. return true;
  119. }