GfxInfoWebGL.cpp 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. /* vim: se cin sw=2 ts=2 et : */
  2. /* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-
  3. *
  4. * This Source Code Form is subject to the terms of the Mozilla Public
  5. * License, v. 2.0. If a copy of the MPL was not distributed with this
  6. * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
  7. #include "GfxInfoWebGL.h"
  8. #include "nsServiceManagerUtils.h"
  9. #include "GLDefs.h"
  10. #include "nsIDOMWebGLRenderingContext.h"
  11. #include "nsICanvasRenderingContextInternal.h"
  12. using namespace mozilla::widget;
  13. nsresult
  14. GfxInfoWebGL::GetWebGLParameter(const nsAString& aParam, nsAString& aResult)
  15. {
  16. GLenum param;
  17. if (aParam.EqualsLiteral("vendor")) param = LOCAL_GL_VENDOR;
  18. else if (aParam.EqualsLiteral("renderer")) param = LOCAL_GL_RENDERER;
  19. else if (aParam.EqualsLiteral("version")) param = LOCAL_GL_VERSION;
  20. else if (aParam.EqualsLiteral("shading_language_version")) param = LOCAL_GL_SHADING_LANGUAGE_VERSION;
  21. else if (aParam.EqualsLiteral("extensions")) param = LOCAL_GL_EXTENSIONS;
  22. else if (aParam.EqualsLiteral("full-renderer")) param = 0;
  23. else return NS_ERROR_INVALID_ARG;
  24. nsCOMPtr<nsIDOMWebGLRenderingContext> webgl =
  25. do_CreateInstance("@mozilla.org/content/canvas-rendering-context;1?id=webgl");
  26. if (!webgl)
  27. return NS_ERROR_NOT_AVAILABLE;
  28. nsCOMPtr<nsICanvasRenderingContextInternal> webglInternal =
  29. do_QueryInterface(webgl);
  30. if (!webglInternal)
  31. return NS_ERROR_NOT_AVAILABLE;
  32. nsresult rv = webglInternal->SetDimensions(16, 16);
  33. NS_ENSURE_SUCCESS(rv, rv);
  34. if (param)
  35. return webgl->MozGetUnderlyingParamString(param, aResult);
  36. // this is the "full renderer" string, which is vendor + renderer + version
  37. nsAutoString str;
  38. rv = webgl->MozGetUnderlyingParamString(LOCAL_GL_VENDOR, str);
  39. NS_ENSURE_SUCCESS(rv, rv);
  40. aResult.Append(str);
  41. aResult.AppendLiteral(" -- ");
  42. rv = webgl->MozGetUnderlyingParamString(LOCAL_GL_RENDERER, str);
  43. NS_ENSURE_SUCCESS(rv, rv);
  44. aResult.Append(str);
  45. aResult.AppendLiteral(" -- ");
  46. rv = webgl->MozGetUnderlyingParamString(LOCAL_GL_VERSION, str);
  47. NS_ENSURE_SUCCESS(rv, rv);
  48. aResult.Append(str);
  49. return NS_OK;
  50. }