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