14f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com// 24f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com// Copyright (c) 2002-2010 The ANGLE Project Authors. All rights reserved. 34f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com// Use of this source code is governed by a BSD-style license that can be 44f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com// found in the LICENSE file. 54f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com// 64f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com 74f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com// angleutils.h: Common ANGLE utilities. 84f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com 9bbf56f755e0dd78c7650c52531ce412fcaaafa2bdaniel@transgaming.com#ifndef COMMON_ANGLEUTILS_H_ 10bbf56f755e0dd78c7650c52531ce412fcaaafa2bdaniel@transgaming.com#define COMMON_ANGLEUTILS_H_ 11bbf56f755e0dd78c7650c52531ce412fcaaafa2bdaniel@transgaming.com 12f386bf76d5751e0bfa2073ca57210c73d8b85809Jamie Madill#include <stddef.h> 13f386bf76d5751e0bfa2073ca57210c73d8b85809Jamie Madill 144f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com// A macro to disallow the copy constructor and operator= functions 154f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com// This must be used in the private: declarations for a class 164f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com#define DISALLOW_COPY_AND_ASSIGN(TypeName) \ 174f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com TypeName(const TypeName&); \ 184f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com void operator=(const TypeName&) 194f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com 206d79257d0a1dd174844fda8a7f5aee36d2d119f4shannon.woods@transgaming.comtemplate <typename T, unsigned int N> 216d79257d0a1dd174844fda8a7f5aee36d2d119f4shannon.woods@transgaming.cominline unsigned int ArraySize(T(&)[N]) 226d79257d0a1dd174844fda8a7f5aee36d2d119f4shannon.woods@transgaming.com{ 236d79257d0a1dd174844fda8a7f5aee36d2d119f4shannon.woods@transgaming.com return N; 246d79257d0a1dd174844fda8a7f5aee36d2d119f4shannon.woods@transgaming.com} 256d79257d0a1dd174844fda8a7f5aee36d2d119f4shannon.woods@transgaming.com 26962247710c891af9f847c3c26670c3ab8928219cshannon.woods%transgaming.com@gtempaccount.comtemplate <typename T, unsigned int N> 27962247710c891af9f847c3c26670c3ab8928219cshannon.woods%transgaming.com@gtempaccount.comvoid SafeRelease(T (&resourceBlock)[N]) 28962247710c891af9f847c3c26670c3ab8928219cshannon.woods%transgaming.com@gtempaccount.com{ 29962247710c891af9f847c3c26670c3ab8928219cshannon.woods%transgaming.com@gtempaccount.com for (unsigned int i = 0; i < N; i++) 30962247710c891af9f847c3c26670c3ab8928219cshannon.woods%transgaming.com@gtempaccount.com { 31962247710c891af9f847c3c26670c3ab8928219cshannon.woods%transgaming.com@gtempaccount.com SafeRelease(resourceBlock[i]); 32962247710c891af9f847c3c26670c3ab8928219cshannon.woods%transgaming.com@gtempaccount.com } 33962247710c891af9f847c3c26670c3ab8928219cshannon.woods%transgaming.com@gtempaccount.com} 34962247710c891af9f847c3c26670c3ab8928219cshannon.woods%transgaming.com@gtempaccount.com 35962247710c891af9f847c3c26670c3ab8928219cshannon.woods%transgaming.com@gtempaccount.comtemplate <typename T> 36962247710c891af9f847c3c26670c3ab8928219cshannon.woods%transgaming.com@gtempaccount.comvoid SafeRelease(T& resource) 37962247710c891af9f847c3c26670c3ab8928219cshannon.woods%transgaming.com@gtempaccount.com{ 38962247710c891af9f847c3c26670c3ab8928219cshannon.woods%transgaming.com@gtempaccount.com if (resource) 39962247710c891af9f847c3c26670c3ab8928219cshannon.woods%transgaming.com@gtempaccount.com { 40962247710c891af9f847c3c26670c3ab8928219cshannon.woods%transgaming.com@gtempaccount.com resource->Release(); 41962247710c891af9f847c3c26670c3ab8928219cshannon.woods%transgaming.com@gtempaccount.com resource = NULL; 42962247710c891af9f847c3c26670c3ab8928219cshannon.woods%transgaming.com@gtempaccount.com } 43962247710c891af9f847c3c26670c3ab8928219cshannon.woods%transgaming.com@gtempaccount.com} 44962247710c891af9f847c3c26670c3ab8928219cshannon.woods%transgaming.com@gtempaccount.com 45ea2286352f5eba47dfaa3e9ab418bbacfd1ba8a1Geoff Langtemplate <typename T> 46ea2286352f5eba47dfaa3e9ab418bbacfd1ba8a1Geoff Langvoid SafeDelete(T*& resource) 47ea2286352f5eba47dfaa3e9ab418bbacfd1ba8a1Geoff Lang{ 48ea2286352f5eba47dfaa3e9ab418bbacfd1ba8a1Geoff Lang delete resource; 49ea2286352f5eba47dfaa3e9ab418bbacfd1ba8a1Geoff Lang resource = NULL; 50ea2286352f5eba47dfaa3e9ab418bbacfd1ba8a1Geoff Lang} 51ea2286352f5eba47dfaa3e9ab418bbacfd1ba8a1Geoff Lang 52ea2286352f5eba47dfaa3e9ab418bbacfd1ba8a1Geoff Langtemplate <typename T> 53ea2286352f5eba47dfaa3e9ab418bbacfd1ba8a1Geoff Langvoid SafeDeleteArray(T*& resource) 54ea2286352f5eba47dfaa3e9ab418bbacfd1ba8a1Geoff Lang{ 55ea2286352f5eba47dfaa3e9ab418bbacfd1ba8a1Geoff Lang delete[] resource; 56ea2286352f5eba47dfaa3e9ab418bbacfd1ba8a1Geoff Lang resource = NULL; 57ea2286352f5eba47dfaa3e9ab418bbacfd1ba8a1Geoff Lang} 58ea2286352f5eba47dfaa3e9ab418bbacfd1ba8a1Geoff Lang 59d3f0f1ec8179603757b96a851f3b7d9d9152dfd8Jamie Madill// Provide a less-than function for comparing structs 60d3f0f1ec8179603757b96a851f3b7d9d9152dfd8Jamie Madill// Note: struct memory must be initialized to zero, because of packing gaps 61d3f0f1ec8179603757b96a851f3b7d9d9152dfd8Jamie Madilltemplate <typename T> 62d3f0f1ec8179603757b96a851f3b7d9d9152dfd8Jamie Madillinline bool StructLessThan(const T &a, const T &b) 63d3f0f1ec8179603757b96a851f3b7d9d9152dfd8Jamie Madill{ 64d3f0f1ec8179603757b96a851f3b7d9d9152dfd8Jamie Madill return (memcmp(&a, &b, sizeof(T)) < 0); 65d3f0f1ec8179603757b96a851f3b7d9d9152dfd8Jamie Madill} 66d3f0f1ec8179603757b96a851f3b7d9d9152dfd8Jamie Madill 67d3f0f1ec8179603757b96a851f3b7d9d9152dfd8Jamie Madill// Provide a less-than function for comparing structs 68d3f0f1ec8179603757b96a851f3b7d9d9152dfd8Jamie Madill// Note: struct memory must be initialized to zero, because of packing gaps 69d3f0f1ec8179603757b96a851f3b7d9d9152dfd8Jamie Madilltemplate <typename T> 70d3f0f1ec8179603757b96a851f3b7d9d9152dfd8Jamie Madillinline bool StructEquals(const T &a, const T &b) 71d3f0f1ec8179603757b96a851f3b7d9d9152dfd8Jamie Madill{ 72d3f0f1ec8179603757b96a851f3b7d9d9152dfd8Jamie Madill return (memcmp(&a, &b, sizeof(T)) == 0); 73d3f0f1ec8179603757b96a851f3b7d9d9152dfd8Jamie Madill} 74d3f0f1ec8179603757b96a851f3b7d9d9152dfd8Jamie Madill 75d3f0f1ec8179603757b96a851f3b7d9d9152dfd8Jamie Madilltemplate <typename T> 76d3f0f1ec8179603757b96a851f3b7d9d9152dfd8Jamie Madillinline void StructZero(T *obj) 77d3f0f1ec8179603757b96a851f3b7d9d9152dfd8Jamie Madill{ 78d3f0f1ec8179603757b96a851f3b7d9d9152dfd8Jamie Madill memset(obj, 0, sizeof(T)); 79d3f0f1ec8179603757b96a851f3b7d9d9152dfd8Jamie Madill} 80d3f0f1ec8179603757b96a851f3b7d9d9152dfd8Jamie Madill 8179fb1019a16cc0b0af7f75a9b823b66e63fd99edalokp@chromium.org#if defined(_MSC_VER) 8279fb1019a16cc0b0af7f75a9b823b66e63fd99edalokp@chromium.org#define snprintf _snprintf 8379fb1019a16cc0b0af7f75a9b823b66e63fd99edalokp@chromium.org#endif 8479fb1019a16cc0b0af7f75a9b823b66e63fd99edalokp@chromium.org 8585e4419f971302c66bf57c074573fdf7cca209c5apatrick@chromium.org#define VENDOR_ID_AMD 0x1002 8685e4419f971302c66bf57c074573fdf7cca209c5apatrick@chromium.org#define VENDOR_ID_INTEL 0x8086 8785e4419f971302c66bf57c074573fdf7cca209c5apatrick@chromium.org#define VENDOR_ID_NVIDIA 0x10DE 8885e4419f971302c66bf57c074573fdf7cca209c5apatrick@chromium.org 89106e1f7b67f042d008dd6616f73ff03492bf1d5adaniel@transgaming.com#define GL_BGRA4_ANGLEX 0x6ABC 90106e1f7b67f042d008dd6616f73ff03492bf1d5adaniel@transgaming.com#define GL_BGR5_A1_ANGLEX 0x6ABD 910fda98687c2103ada393a6c39640c8efddc7994aJamie Madill#define GL_INT_64_ANGLEX 0x6ABE 9228167c62a29c4514b52304ddc748eaa2616053c9Jamie Madill#define GL_STRUCT_ANGLEX 0x6ABF 93106e1f7b67f042d008dd6616f73ff03492bf1d5adaniel@transgaming.com 94bbf56f755e0dd78c7650c52531ce412fcaaafa2bdaniel@transgaming.com#endif // COMMON_ANGLEUTILS_H_ 95