Path: blob/main_old/src/common/PackedGLEnums_autogen.cpp
1693 views
// GENERATED FILE - DO NOT EDIT.1// Generated by gen_packed_gl_enums.py using data from packed_gl_enums.json.2//3// Copyright 2017 The ANGLE Project Authors. All rights reserved.4// Use of this source code is governed by a BSD-style license that can be5// found in the LICENSE file.6//7// PackedGLEnums_autogen.cpp:8// Implements ANGLE-specific enums classes for GLenums and functions operating9// on them.1011#include "common/PackedGLEnums_autogen.h"12#include "common/debug.h"1314namespace gl15{1617template <>18AlphaTestFunc FromGLenum<AlphaTestFunc>(GLenum from)19{20switch (from)21{22case GL_ALWAYS:23return AlphaTestFunc::AlwaysPass;24case GL_EQUAL:25return AlphaTestFunc::Equal;26case GL_GEQUAL:27return AlphaTestFunc::Gequal;28case GL_GREATER:29return AlphaTestFunc::Greater;30case GL_LEQUAL:31return AlphaTestFunc::Lequal;32case GL_LESS:33return AlphaTestFunc::Less;34case GL_NEVER:35return AlphaTestFunc::Never;36case GL_NOTEQUAL:37return AlphaTestFunc::NotEqual;38default:39return AlphaTestFunc::InvalidEnum;40}41}4243GLenum ToGLenum(AlphaTestFunc from)44{45switch (from)46{47case AlphaTestFunc::AlwaysPass:48return GL_ALWAYS;49case AlphaTestFunc::Equal:50return GL_EQUAL;51case AlphaTestFunc::Gequal:52return GL_GEQUAL;53case AlphaTestFunc::Greater:54return GL_GREATER;55case AlphaTestFunc::Lequal:56return GL_LEQUAL;57case AlphaTestFunc::Less:58return GL_LESS;59case AlphaTestFunc::Never:60return GL_NEVER;61case AlphaTestFunc::NotEqual:62return GL_NOTEQUAL;63default:64UNREACHABLE();65return 0;66}67}6869std::ostream &operator<<(std::ostream &os, AlphaTestFunc value)70{71switch (value)72{73case AlphaTestFunc::AlwaysPass:74os << "GL_ALWAYS";75break;76case AlphaTestFunc::Equal:77os << "GL_EQUAL";78break;79case AlphaTestFunc::Gequal:80os << "GL_GEQUAL";81break;82case AlphaTestFunc::Greater:83os << "GL_GREATER";84break;85case AlphaTestFunc::Lequal:86os << "GL_LEQUAL";87break;88case AlphaTestFunc::Less:89os << "GL_LESS";90break;91case AlphaTestFunc::Never:92os << "GL_NEVER";93break;94case AlphaTestFunc::NotEqual:95os << "GL_NOTEQUAL";96break;97default:98os << "GL_INVALID_ENUM";99break;100}101return os;102}103104template <>105BufferBinding FromGLenum<BufferBinding>(GLenum from)106{107switch (from)108{109case GL_ARRAY_BUFFER:110return BufferBinding::Array;111case GL_ATOMIC_COUNTER_BUFFER:112return BufferBinding::AtomicCounter;113case GL_COPY_READ_BUFFER:114return BufferBinding::CopyRead;115case GL_COPY_WRITE_BUFFER:116return BufferBinding::CopyWrite;117case GL_DISPATCH_INDIRECT_BUFFER:118return BufferBinding::DispatchIndirect;119case GL_DRAW_INDIRECT_BUFFER:120return BufferBinding::DrawIndirect;121case GL_ELEMENT_ARRAY_BUFFER:122return BufferBinding::ElementArray;123case GL_PIXEL_PACK_BUFFER:124return BufferBinding::PixelPack;125case GL_PIXEL_UNPACK_BUFFER:126return BufferBinding::PixelUnpack;127case GL_SHADER_STORAGE_BUFFER:128return BufferBinding::ShaderStorage;129case GL_TEXTURE_BUFFER:130return BufferBinding::Texture;131case GL_TRANSFORM_FEEDBACK_BUFFER:132return BufferBinding::TransformFeedback;133case GL_UNIFORM_BUFFER:134return BufferBinding::Uniform;135default:136return BufferBinding::InvalidEnum;137}138}139140GLenum ToGLenum(BufferBinding from)141{142switch (from)143{144case BufferBinding::Array:145return GL_ARRAY_BUFFER;146case BufferBinding::AtomicCounter:147return GL_ATOMIC_COUNTER_BUFFER;148case BufferBinding::CopyRead:149return GL_COPY_READ_BUFFER;150case BufferBinding::CopyWrite:151return GL_COPY_WRITE_BUFFER;152case BufferBinding::DispatchIndirect:153return GL_DISPATCH_INDIRECT_BUFFER;154case BufferBinding::DrawIndirect:155return GL_DRAW_INDIRECT_BUFFER;156case BufferBinding::ElementArray:157return GL_ELEMENT_ARRAY_BUFFER;158case BufferBinding::PixelPack:159return GL_PIXEL_PACK_BUFFER;160case BufferBinding::PixelUnpack:161return GL_PIXEL_UNPACK_BUFFER;162case BufferBinding::ShaderStorage:163return GL_SHADER_STORAGE_BUFFER;164case BufferBinding::Texture:165return GL_TEXTURE_BUFFER;166case BufferBinding::TransformFeedback:167return GL_TRANSFORM_FEEDBACK_BUFFER;168case BufferBinding::Uniform:169return GL_UNIFORM_BUFFER;170default:171UNREACHABLE();172return 0;173}174}175176std::ostream &operator<<(std::ostream &os, BufferBinding value)177{178switch (value)179{180case BufferBinding::Array:181os << "GL_ARRAY_BUFFER";182break;183case BufferBinding::AtomicCounter:184os << "GL_ATOMIC_COUNTER_BUFFER";185break;186case BufferBinding::CopyRead:187os << "GL_COPY_READ_BUFFER";188break;189case BufferBinding::CopyWrite:190os << "GL_COPY_WRITE_BUFFER";191break;192case BufferBinding::DispatchIndirect:193os << "GL_DISPATCH_INDIRECT_BUFFER";194break;195case BufferBinding::DrawIndirect:196os << "GL_DRAW_INDIRECT_BUFFER";197break;198case BufferBinding::ElementArray:199os << "GL_ELEMENT_ARRAY_BUFFER";200break;201case BufferBinding::PixelPack:202os << "GL_PIXEL_PACK_BUFFER";203break;204case BufferBinding::PixelUnpack:205os << "GL_PIXEL_UNPACK_BUFFER";206break;207case BufferBinding::ShaderStorage:208os << "GL_SHADER_STORAGE_BUFFER";209break;210case BufferBinding::Texture:211os << "GL_TEXTURE_BUFFER";212break;213case BufferBinding::TransformFeedback:214os << "GL_TRANSFORM_FEEDBACK_BUFFER";215break;216case BufferBinding::Uniform:217os << "GL_UNIFORM_BUFFER";218break;219default:220os << "GL_INVALID_ENUM";221break;222}223return os;224}225226template <>227BufferUsage FromGLenum<BufferUsage>(GLenum from)228{229switch (from)230{231case GL_DYNAMIC_COPY:232return BufferUsage::DynamicCopy;233case GL_DYNAMIC_DRAW:234return BufferUsage::DynamicDraw;235case GL_DYNAMIC_READ:236return BufferUsage::DynamicRead;237case GL_STATIC_COPY:238return BufferUsage::StaticCopy;239case GL_STATIC_DRAW:240return BufferUsage::StaticDraw;241case GL_STATIC_READ:242return BufferUsage::StaticRead;243case GL_STREAM_COPY:244return BufferUsage::StreamCopy;245case GL_STREAM_DRAW:246return BufferUsage::StreamDraw;247case GL_STREAM_READ:248return BufferUsage::StreamRead;249default:250return BufferUsage::InvalidEnum;251}252}253254GLenum ToGLenum(BufferUsage from)255{256switch (from)257{258case BufferUsage::DynamicCopy:259return GL_DYNAMIC_COPY;260case BufferUsage::DynamicDraw:261return GL_DYNAMIC_DRAW;262case BufferUsage::DynamicRead:263return GL_DYNAMIC_READ;264case BufferUsage::StaticCopy:265return GL_STATIC_COPY;266case BufferUsage::StaticDraw:267return GL_STATIC_DRAW;268case BufferUsage::StaticRead:269return GL_STATIC_READ;270case BufferUsage::StreamCopy:271return GL_STREAM_COPY;272case BufferUsage::StreamDraw:273return GL_STREAM_DRAW;274case BufferUsage::StreamRead:275return GL_STREAM_READ;276default:277UNREACHABLE();278return 0;279}280}281282std::ostream &operator<<(std::ostream &os, BufferUsage value)283{284switch (value)285{286case BufferUsage::DynamicCopy:287os << "GL_DYNAMIC_COPY";288break;289case BufferUsage::DynamicDraw:290os << "GL_DYNAMIC_DRAW";291break;292case BufferUsage::DynamicRead:293os << "GL_DYNAMIC_READ";294break;295case BufferUsage::StaticCopy:296os << "GL_STATIC_COPY";297break;298case BufferUsage::StaticDraw:299os << "GL_STATIC_DRAW";300break;301case BufferUsage::StaticRead:302os << "GL_STATIC_READ";303break;304case BufferUsage::StreamCopy:305os << "GL_STREAM_COPY";306break;307case BufferUsage::StreamDraw:308os << "GL_STREAM_DRAW";309break;310case BufferUsage::StreamRead:311os << "GL_STREAM_READ";312break;313default:314os << "GL_INVALID_ENUM";315break;316}317return os;318}319320template <>321ClientVertexArrayType FromGLenum<ClientVertexArrayType>(GLenum from)322{323switch (from)324{325case GL_COLOR_ARRAY:326return ClientVertexArrayType::Color;327case GL_NORMAL_ARRAY:328return ClientVertexArrayType::Normal;329case GL_POINT_SIZE_ARRAY_OES:330return ClientVertexArrayType::PointSize;331case GL_TEXTURE_COORD_ARRAY:332return ClientVertexArrayType::TextureCoord;333case GL_VERTEX_ARRAY:334return ClientVertexArrayType::Vertex;335default:336return ClientVertexArrayType::InvalidEnum;337}338}339340GLenum ToGLenum(ClientVertexArrayType from)341{342switch (from)343{344case ClientVertexArrayType::Color:345return GL_COLOR_ARRAY;346case ClientVertexArrayType::Normal:347return GL_NORMAL_ARRAY;348case ClientVertexArrayType::PointSize:349return GL_POINT_SIZE_ARRAY_OES;350case ClientVertexArrayType::TextureCoord:351return GL_TEXTURE_COORD_ARRAY;352case ClientVertexArrayType::Vertex:353return GL_VERTEX_ARRAY;354default:355UNREACHABLE();356return 0;357}358}359360std::ostream &operator<<(std::ostream &os, ClientVertexArrayType value)361{362switch (value)363{364case ClientVertexArrayType::Color:365os << "GL_COLOR_ARRAY";366break;367case ClientVertexArrayType::Normal:368os << "GL_NORMAL_ARRAY";369break;370case ClientVertexArrayType::PointSize:371os << "GL_POINT_SIZE_ARRAY_OES";372break;373case ClientVertexArrayType::TextureCoord:374os << "GL_TEXTURE_COORD_ARRAY";375break;376case ClientVertexArrayType::Vertex:377os << "GL_VERTEX_ARRAY";378break;379default:380os << "GL_INVALID_ENUM";381break;382}383return os;384}385386template <>387CullFaceMode FromGLenum<CullFaceMode>(GLenum from)388{389switch (from)390{391case GL_BACK:392return CullFaceMode::Back;393case GL_FRONT:394return CullFaceMode::Front;395case GL_FRONT_AND_BACK:396return CullFaceMode::FrontAndBack;397default:398return CullFaceMode::InvalidEnum;399}400}401402GLenum ToGLenum(CullFaceMode from)403{404switch (from)405{406case CullFaceMode::Back:407return GL_BACK;408case CullFaceMode::Front:409return GL_FRONT;410case CullFaceMode::FrontAndBack:411return GL_FRONT_AND_BACK;412default:413UNREACHABLE();414return 0;415}416}417418std::ostream &operator<<(std::ostream &os, CullFaceMode value)419{420switch (value)421{422case CullFaceMode::Back:423os << "GL_BACK";424break;425case CullFaceMode::Front:426os << "GL_FRONT";427break;428case CullFaceMode::FrontAndBack:429os << "GL_FRONT_AND_BACK";430break;431default:432os << "GL_INVALID_ENUM";433break;434}435return os;436}437438template <>439FilterMode FromGLenum<FilterMode>(GLenum from)440{441switch (from)442{443case GL_NEAREST:444return FilterMode::Nearest;445case GL_LINEAR:446return FilterMode::Linear;447case GL_NEAREST_MIPMAP_NEAREST:448return FilterMode::NearestMipmapNearest;449case GL_NEAREST_MIPMAP_LINEAR:450return FilterMode::NearestMipmapLinear;451case GL_LINEAR_MIPMAP_LINEAR:452return FilterMode::LinearMipmapLinear;453default:454return FilterMode::InvalidEnum;455}456}457458GLenum ToGLenum(FilterMode from)459{460switch (from)461{462case FilterMode::Nearest:463return GL_NEAREST;464case FilterMode::Linear:465return GL_LINEAR;466case FilterMode::NearestMipmapNearest:467return GL_NEAREST_MIPMAP_NEAREST;468case FilterMode::NearestMipmapLinear:469return GL_NEAREST_MIPMAP_LINEAR;470case FilterMode::LinearMipmapLinear:471return GL_LINEAR_MIPMAP_LINEAR;472default:473UNREACHABLE();474return 0;475}476}477478std::ostream &operator<<(std::ostream &os, FilterMode value)479{480switch (value)481{482case FilterMode::Nearest:483os << "GL_NEAREST";484break;485case FilterMode::Linear:486os << "GL_LINEAR";487break;488case FilterMode::NearestMipmapNearest:489os << "GL_NEAREST_MIPMAP_NEAREST";490break;491case FilterMode::NearestMipmapLinear:492os << "GL_NEAREST_MIPMAP_LINEAR";493break;494case FilterMode::LinearMipmapLinear:495os << "GL_LINEAR_MIPMAP_LINEAR";496break;497default:498os << "GL_INVALID_ENUM";499break;500}501return os;502}503504template <>505FogMode FromGLenum<FogMode>(GLenum from)506{507switch (from)508{509case GL_EXP:510return FogMode::Exp;511case GL_EXP2:512return FogMode::Exp2;513case GL_LINEAR:514return FogMode::Linear;515default:516return FogMode::InvalidEnum;517}518}519520GLenum ToGLenum(FogMode from)521{522switch (from)523{524case FogMode::Exp:525return GL_EXP;526case FogMode::Exp2:527return GL_EXP2;528case FogMode::Linear:529return GL_LINEAR;530default:531UNREACHABLE();532return 0;533}534}535536std::ostream &operator<<(std::ostream &os, FogMode value)537{538switch (value)539{540case FogMode::Exp:541os << "GL_EXP";542break;543case FogMode::Exp2:544os << "GL_EXP2";545break;546case FogMode::Linear:547os << "GL_LINEAR";548break;549default:550os << "GL_INVALID_ENUM";551break;552}553return os;554}555556template <>557GraphicsResetStatus FromGLenum<GraphicsResetStatus>(GLenum from)558{559switch (from)560{561case GL_NO_ERROR:562return GraphicsResetStatus::NoError;563case GL_GUILTY_CONTEXT_RESET:564return GraphicsResetStatus::GuiltyContextReset;565case GL_INNOCENT_CONTEXT_RESET:566return GraphicsResetStatus::InnocentContextReset;567case GL_UNKNOWN_CONTEXT_RESET:568return GraphicsResetStatus::UnknownContextReset;569case GL_PURGED_CONTEXT_RESET_NV:570return GraphicsResetStatus::PurgedContextResetNV;571default:572return GraphicsResetStatus::InvalidEnum;573}574}575576GLenum ToGLenum(GraphicsResetStatus from)577{578switch (from)579{580case GraphicsResetStatus::NoError:581return GL_NO_ERROR;582case GraphicsResetStatus::GuiltyContextReset:583return GL_GUILTY_CONTEXT_RESET;584case GraphicsResetStatus::InnocentContextReset:585return GL_INNOCENT_CONTEXT_RESET;586case GraphicsResetStatus::UnknownContextReset:587return GL_UNKNOWN_CONTEXT_RESET;588case GraphicsResetStatus::PurgedContextResetNV:589return GL_PURGED_CONTEXT_RESET_NV;590default:591UNREACHABLE();592return 0;593}594}595596std::ostream &operator<<(std::ostream &os, GraphicsResetStatus value)597{598switch (value)599{600case GraphicsResetStatus::NoError:601os << "GL_NO_ERROR";602break;603case GraphicsResetStatus::GuiltyContextReset:604os << "GL_GUILTY_CONTEXT_RESET";605break;606case GraphicsResetStatus::InnocentContextReset:607os << "GL_INNOCENT_CONTEXT_RESET";608break;609case GraphicsResetStatus::UnknownContextReset:610os << "GL_UNKNOWN_CONTEXT_RESET";611break;612case GraphicsResetStatus::PurgedContextResetNV:613os << "GL_PURGED_CONTEXT_RESET_NV";614break;615default:616os << "GL_INVALID_ENUM";617break;618}619return os;620}621622template <>623HandleType FromGLenum<HandleType>(GLenum from)624{625switch (from)626{627case GL_HANDLE_TYPE_OPAQUE_FD_EXT:628return HandleType::OpaqueFd;629case GL_HANDLE_TYPE_ZIRCON_VMO_ANGLE:630return HandleType::ZirconVmo;631case GL_HANDLE_TYPE_ZIRCON_EVENT_ANGLE:632return HandleType::ZirconEvent;633default:634return HandleType::InvalidEnum;635}636}637638GLenum ToGLenum(HandleType from)639{640switch (from)641{642case HandleType::OpaqueFd:643return GL_HANDLE_TYPE_OPAQUE_FD_EXT;644case HandleType::ZirconVmo:645return GL_HANDLE_TYPE_ZIRCON_VMO_ANGLE;646case HandleType::ZirconEvent:647return GL_HANDLE_TYPE_ZIRCON_EVENT_ANGLE;648default:649UNREACHABLE();650return 0;651}652}653654std::ostream &operator<<(std::ostream &os, HandleType value)655{656switch (value)657{658case HandleType::OpaqueFd:659os << "GL_HANDLE_TYPE_OPAQUE_FD_EXT";660break;661case HandleType::ZirconVmo:662os << "GL_HANDLE_TYPE_ZIRCON_VMO_ANGLE";663break;664case HandleType::ZirconEvent:665os << "GL_HANDLE_TYPE_ZIRCON_EVENT_ANGLE";666break;667default:668os << "GL_INVALID_ENUM";669break;670}671return os;672}673674template <>675HintSetting FromGLenum<HintSetting>(GLenum from)676{677switch (from)678{679case GL_DONT_CARE:680return HintSetting::DontCare;681case GL_FASTEST:682return HintSetting::Fastest;683case GL_NICEST:684return HintSetting::Nicest;685default:686return HintSetting::InvalidEnum;687}688}689690GLenum ToGLenum(HintSetting from)691{692switch (from)693{694case HintSetting::DontCare:695return GL_DONT_CARE;696case HintSetting::Fastest:697return GL_FASTEST;698case HintSetting::Nicest:699return GL_NICEST;700default:701UNREACHABLE();702return 0;703}704}705706std::ostream &operator<<(std::ostream &os, HintSetting value)707{708switch (value)709{710case HintSetting::DontCare:711os << "GL_DONT_CARE";712break;713case HintSetting::Fastest:714os << "GL_FASTEST";715break;716case HintSetting::Nicest:717os << "GL_NICEST";718break;719default:720os << "GL_INVALID_ENUM";721break;722}723return os;724}725726template <>727ImageLayout FromGLenum<ImageLayout>(GLenum from)728{729switch (from)730{731case GL_NONE:732return ImageLayout::Undefined;733case GL_LAYOUT_GENERAL_EXT:734return ImageLayout::General;735case GL_LAYOUT_COLOR_ATTACHMENT_EXT:736return ImageLayout::ColorAttachment;737case GL_LAYOUT_DEPTH_STENCIL_ATTACHMENT_EXT:738return ImageLayout::DepthStencilAttachment;739case GL_LAYOUT_DEPTH_STENCIL_READ_ONLY_EXT:740return ImageLayout::DepthStencilReadOnlyAttachment;741case GL_LAYOUT_SHADER_READ_ONLY_EXT:742return ImageLayout::ShaderReadOnly;743case GL_LAYOUT_TRANSFER_SRC_EXT:744return ImageLayout::TransferSrc;745case GL_LAYOUT_TRANSFER_DST_EXT:746return ImageLayout::TransferDst;747case GL_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_EXT:748return ImageLayout::DepthReadOnlyStencilAttachment;749case GL_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_EXT:750return ImageLayout::DepthAttachmentStencilReadOnly;751default:752return ImageLayout::InvalidEnum;753}754}755756GLenum ToGLenum(ImageLayout from)757{758switch (from)759{760case ImageLayout::Undefined:761return GL_NONE;762case ImageLayout::General:763return GL_LAYOUT_GENERAL_EXT;764case ImageLayout::ColorAttachment:765return GL_LAYOUT_COLOR_ATTACHMENT_EXT;766case ImageLayout::DepthStencilAttachment:767return GL_LAYOUT_DEPTH_STENCIL_ATTACHMENT_EXT;768case ImageLayout::DepthStencilReadOnlyAttachment:769return GL_LAYOUT_DEPTH_STENCIL_READ_ONLY_EXT;770case ImageLayout::ShaderReadOnly:771return GL_LAYOUT_SHADER_READ_ONLY_EXT;772case ImageLayout::TransferSrc:773return GL_LAYOUT_TRANSFER_SRC_EXT;774case ImageLayout::TransferDst:775return GL_LAYOUT_TRANSFER_DST_EXT;776case ImageLayout::DepthReadOnlyStencilAttachment:777return GL_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_EXT;778case ImageLayout::DepthAttachmentStencilReadOnly:779return GL_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_EXT;780default:781UNREACHABLE();782return 0;783}784}785786std::ostream &operator<<(std::ostream &os, ImageLayout value)787{788switch (value)789{790case ImageLayout::Undefined:791os << "GL_NONE";792break;793case ImageLayout::General:794os << "GL_LAYOUT_GENERAL_EXT";795break;796case ImageLayout::ColorAttachment:797os << "GL_LAYOUT_COLOR_ATTACHMENT_EXT";798break;799case ImageLayout::DepthStencilAttachment:800os << "GL_LAYOUT_DEPTH_STENCIL_ATTACHMENT_EXT";801break;802case ImageLayout::DepthStencilReadOnlyAttachment:803os << "GL_LAYOUT_DEPTH_STENCIL_READ_ONLY_EXT";804break;805case ImageLayout::ShaderReadOnly:806os << "GL_LAYOUT_SHADER_READ_ONLY_EXT";807break;808case ImageLayout::TransferSrc:809os << "GL_LAYOUT_TRANSFER_SRC_EXT";810break;811case ImageLayout::TransferDst:812os << "GL_LAYOUT_TRANSFER_DST_EXT";813break;814case ImageLayout::DepthReadOnlyStencilAttachment:815os << "GL_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_EXT";816break;817case ImageLayout::DepthAttachmentStencilReadOnly:818os << "GL_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_EXT";819break;820default:821os << "GL_INVALID_ENUM";822break;823}824return os;825}826827template <>828LightParameter FromGLenum<LightParameter>(GLenum from)829{830switch (from)831{832case GL_AMBIENT:833return LightParameter::Ambient;834case GL_AMBIENT_AND_DIFFUSE:835return LightParameter::AmbientAndDiffuse;836case GL_CONSTANT_ATTENUATION:837return LightParameter::ConstantAttenuation;838case GL_DIFFUSE:839return LightParameter::Diffuse;840case GL_LINEAR_ATTENUATION:841return LightParameter::LinearAttenuation;842case GL_POSITION:843return LightParameter::Position;844case GL_QUADRATIC_ATTENUATION:845return LightParameter::QuadraticAttenuation;846case GL_SPECULAR:847return LightParameter::Specular;848case GL_SPOT_CUTOFF:849return LightParameter::SpotCutoff;850case GL_SPOT_DIRECTION:851return LightParameter::SpotDirection;852case GL_SPOT_EXPONENT:853return LightParameter::SpotExponent;854default:855return LightParameter::InvalidEnum;856}857}858859GLenum ToGLenum(LightParameter from)860{861switch (from)862{863case LightParameter::Ambient:864return GL_AMBIENT;865case LightParameter::AmbientAndDiffuse:866return GL_AMBIENT_AND_DIFFUSE;867case LightParameter::ConstantAttenuation:868return GL_CONSTANT_ATTENUATION;869case LightParameter::Diffuse:870return GL_DIFFUSE;871case LightParameter::LinearAttenuation:872return GL_LINEAR_ATTENUATION;873case LightParameter::Position:874return GL_POSITION;875case LightParameter::QuadraticAttenuation:876return GL_QUADRATIC_ATTENUATION;877case LightParameter::Specular:878return GL_SPECULAR;879case LightParameter::SpotCutoff:880return GL_SPOT_CUTOFF;881case LightParameter::SpotDirection:882return GL_SPOT_DIRECTION;883case LightParameter::SpotExponent:884return GL_SPOT_EXPONENT;885default:886UNREACHABLE();887return 0;888}889}890891std::ostream &operator<<(std::ostream &os, LightParameter value)892{893switch (value)894{895case LightParameter::Ambient:896os << "GL_AMBIENT";897break;898case LightParameter::AmbientAndDiffuse:899os << "GL_AMBIENT_AND_DIFFUSE";900break;901case LightParameter::ConstantAttenuation:902os << "GL_CONSTANT_ATTENUATION";903break;904case LightParameter::Diffuse:905os << "GL_DIFFUSE";906break;907case LightParameter::LinearAttenuation:908os << "GL_LINEAR_ATTENUATION";909break;910case LightParameter::Position:911os << "GL_POSITION";912break;913case LightParameter::QuadraticAttenuation:914os << "GL_QUADRATIC_ATTENUATION";915break;916case LightParameter::Specular:917os << "GL_SPECULAR";918break;919case LightParameter::SpotCutoff:920os << "GL_SPOT_CUTOFF";921break;922case LightParameter::SpotDirection:923os << "GL_SPOT_DIRECTION";924break;925case LightParameter::SpotExponent:926os << "GL_SPOT_EXPONENT";927break;928default:929os << "GL_INVALID_ENUM";930break;931}932return os;933}934935template <>936LogicalOperation FromGLenum<LogicalOperation>(GLenum from)937{938switch (from)939{940case GL_AND:941return LogicalOperation::And;942case GL_AND_INVERTED:943return LogicalOperation::AndInverted;944case GL_AND_REVERSE:945return LogicalOperation::AndReverse;946case GL_CLEAR:947return LogicalOperation::Clear;948case GL_COPY:949return LogicalOperation::Copy;950case GL_COPY_INVERTED:951return LogicalOperation::CopyInverted;952case GL_EQUIV:953return LogicalOperation::Equiv;954case GL_INVERT:955return LogicalOperation::Invert;956case GL_NAND:957return LogicalOperation::Nand;958case GL_NOOP:959return LogicalOperation::Noop;960case GL_NOR:961return LogicalOperation::Nor;962case GL_OR:963return LogicalOperation::Or;964case GL_OR_INVERTED:965return LogicalOperation::OrInverted;966case GL_OR_REVERSE:967return LogicalOperation::OrReverse;968case GL_SET:969return LogicalOperation::Set;970case GL_XOR:971return LogicalOperation::Xor;972default:973return LogicalOperation::InvalidEnum;974}975}976977GLenum ToGLenum(LogicalOperation from)978{979switch (from)980{981case LogicalOperation::And:982return GL_AND;983case LogicalOperation::AndInverted:984return GL_AND_INVERTED;985case LogicalOperation::AndReverse:986return GL_AND_REVERSE;987case LogicalOperation::Clear:988return GL_CLEAR;989case LogicalOperation::Copy:990return GL_COPY;991case LogicalOperation::CopyInverted:992return GL_COPY_INVERTED;993case LogicalOperation::Equiv:994return GL_EQUIV;995case LogicalOperation::Invert:996return GL_INVERT;997case LogicalOperation::Nand:998return GL_NAND;999case LogicalOperation::Noop:1000return GL_NOOP;1001case LogicalOperation::Nor:1002return GL_NOR;1003case LogicalOperation::Or:1004return GL_OR;1005case LogicalOperation::OrInverted:1006return GL_OR_INVERTED;1007case LogicalOperation::OrReverse:1008return GL_OR_REVERSE;1009case LogicalOperation::Set:1010return GL_SET;1011case LogicalOperation::Xor:1012return GL_XOR;1013default:1014UNREACHABLE();1015return 0;1016}1017}10181019std::ostream &operator<<(std::ostream &os, LogicalOperation value)1020{1021switch (value)1022{1023case LogicalOperation::And:1024os << "GL_AND";1025break;1026case LogicalOperation::AndInverted:1027os << "GL_AND_INVERTED";1028break;1029case LogicalOperation::AndReverse:1030os << "GL_AND_REVERSE";1031break;1032case LogicalOperation::Clear:1033os << "GL_CLEAR";1034break;1035case LogicalOperation::Copy:1036os << "GL_COPY";1037break;1038case LogicalOperation::CopyInverted:1039os << "GL_COPY_INVERTED";1040break;1041case LogicalOperation::Equiv:1042os << "GL_EQUIV";1043break;1044case LogicalOperation::Invert:1045os << "GL_INVERT";1046break;1047case LogicalOperation::Nand:1048os << "GL_NAND";1049break;1050case LogicalOperation::Noop:1051os << "GL_NOOP";1052break;1053case LogicalOperation::Nor:1054os << "GL_NOR";1055break;1056case LogicalOperation::Or:1057os << "GL_OR";1058break;1059case LogicalOperation::OrInverted:1060os << "GL_OR_INVERTED";1061break;1062case LogicalOperation::OrReverse:1063os << "GL_OR_REVERSE";1064break;1065case LogicalOperation::Set:1066os << "GL_SET";1067break;1068case LogicalOperation::Xor:1069os << "GL_XOR";1070break;1071default:1072os << "GL_INVALID_ENUM";1073break;1074}1075return os;1076}10771078template <>1079MaterialParameter FromGLenum<MaterialParameter>(GLenum from)1080{1081switch (from)1082{1083case GL_AMBIENT:1084return MaterialParameter::Ambient;1085case GL_AMBIENT_AND_DIFFUSE:1086return MaterialParameter::AmbientAndDiffuse;1087case GL_DIFFUSE:1088return MaterialParameter::Diffuse;1089case GL_EMISSION:1090return MaterialParameter::Emission;1091case GL_SHININESS:1092return MaterialParameter::Shininess;1093case GL_SPECULAR:1094return MaterialParameter::Specular;1095default:1096return MaterialParameter::InvalidEnum;1097}1098}10991100GLenum ToGLenum(MaterialParameter from)1101{1102switch (from)1103{1104case MaterialParameter::Ambient:1105return GL_AMBIENT;1106case MaterialParameter::AmbientAndDiffuse:1107return GL_AMBIENT_AND_DIFFUSE;1108case MaterialParameter::Diffuse:1109return GL_DIFFUSE;1110case MaterialParameter::Emission:1111return GL_EMISSION;1112case MaterialParameter::Shininess:1113return GL_SHININESS;1114case MaterialParameter::Specular:1115return GL_SPECULAR;1116default:1117UNREACHABLE();1118return 0;1119}1120}11211122std::ostream &operator<<(std::ostream &os, MaterialParameter value)1123{1124switch (value)1125{1126case MaterialParameter::Ambient:1127os << "GL_AMBIENT";1128break;1129case MaterialParameter::AmbientAndDiffuse:1130os << "GL_AMBIENT_AND_DIFFUSE";1131break;1132case MaterialParameter::Diffuse:1133os << "GL_DIFFUSE";1134break;1135case MaterialParameter::Emission:1136os << "GL_EMISSION";1137break;1138case MaterialParameter::Shininess:1139os << "GL_SHININESS";1140break;1141case MaterialParameter::Specular:1142os << "GL_SPECULAR";1143break;1144default:1145os << "GL_INVALID_ENUM";1146break;1147}1148return os;1149}11501151template <>1152MatrixType FromGLenum<MatrixType>(GLenum from)1153{1154switch (from)1155{1156case GL_MODELVIEW:1157return MatrixType::Modelview;1158case GL_PROJECTION:1159return MatrixType::Projection;1160case GL_TEXTURE:1161return MatrixType::Texture;1162default:1163return MatrixType::InvalidEnum;1164}1165}11661167GLenum ToGLenum(MatrixType from)1168{1169switch (from)1170{1171case MatrixType::Modelview:1172return GL_MODELVIEW;1173case MatrixType::Projection:1174return GL_PROJECTION;1175case MatrixType::Texture:1176return GL_TEXTURE;1177default:1178UNREACHABLE();1179return 0;1180}1181}11821183std::ostream &operator<<(std::ostream &os, MatrixType value)1184{1185switch (value)1186{1187case MatrixType::Modelview:1188os << "GL_MODELVIEW";1189break;1190case MatrixType::Projection:1191os << "GL_PROJECTION";1192break;1193case MatrixType::Texture:1194os << "GL_TEXTURE";1195break;1196default:1197os << "GL_INVALID_ENUM";1198break;1199}1200return os;1201}12021203template <>1204PointParameter FromGLenum<PointParameter>(GLenum from)1205{1206switch (from)1207{1208case GL_POINT_SIZE_MIN:1209return PointParameter::PointSizeMin;1210case GL_POINT_SIZE_MAX:1211return PointParameter::PointSizeMax;1212case GL_POINT_FADE_THRESHOLD_SIZE:1213return PointParameter::PointFadeThresholdSize;1214case GL_POINT_DISTANCE_ATTENUATION:1215return PointParameter::PointDistanceAttenuation;1216default:1217return PointParameter::InvalidEnum;1218}1219}12201221GLenum ToGLenum(PointParameter from)1222{1223switch (from)1224{1225case PointParameter::PointSizeMin:1226return GL_POINT_SIZE_MIN;1227case PointParameter::PointSizeMax:1228return GL_POINT_SIZE_MAX;1229case PointParameter::PointFadeThresholdSize:1230return GL_POINT_FADE_THRESHOLD_SIZE;1231case PointParameter::PointDistanceAttenuation:1232return GL_POINT_DISTANCE_ATTENUATION;1233default:1234UNREACHABLE();1235return 0;1236}1237}12381239std::ostream &operator<<(std::ostream &os, PointParameter value)1240{1241switch (value)1242{1243case PointParameter::PointSizeMin:1244os << "GL_POINT_SIZE_MIN";1245break;1246case PointParameter::PointSizeMax:1247os << "GL_POINT_SIZE_MAX";1248break;1249case PointParameter::PointFadeThresholdSize:1250os << "GL_POINT_FADE_THRESHOLD_SIZE";1251break;1252case PointParameter::PointDistanceAttenuation:1253os << "GL_POINT_DISTANCE_ATTENUATION";1254break;1255default:1256os << "GL_INVALID_ENUM";1257break;1258}1259return os;1260}12611262template <>1263ProvokingVertexConvention FromGLenum<ProvokingVertexConvention>(GLenum from)1264{1265switch (from)1266{1267case GL_FIRST_VERTEX_CONVENTION:1268return ProvokingVertexConvention::FirstVertexConvention;1269case GL_LAST_VERTEX_CONVENTION:1270return ProvokingVertexConvention::LastVertexConvention;1271default:1272return ProvokingVertexConvention::InvalidEnum;1273}1274}12751276GLenum ToGLenum(ProvokingVertexConvention from)1277{1278switch (from)1279{1280case ProvokingVertexConvention::FirstVertexConvention:1281return GL_FIRST_VERTEX_CONVENTION;1282case ProvokingVertexConvention::LastVertexConvention:1283return GL_LAST_VERTEX_CONVENTION;1284default:1285UNREACHABLE();1286return 0;1287}1288}12891290std::ostream &operator<<(std::ostream &os, ProvokingVertexConvention value)1291{1292switch (value)1293{1294case ProvokingVertexConvention::FirstVertexConvention:1295os << "GL_FIRST_VERTEX_CONVENTION";1296break;1297case ProvokingVertexConvention::LastVertexConvention:1298os << "GL_LAST_VERTEX_CONVENTION";1299break;1300default:1301os << "GL_INVALID_ENUM";1302break;1303}1304return os;1305}13061307template <>1308QueryType FromGLenum<QueryType>(GLenum from)1309{1310switch (from)1311{1312case GL_ANY_SAMPLES_PASSED:1313return QueryType::AnySamples;1314case GL_ANY_SAMPLES_PASSED_CONSERVATIVE:1315return QueryType::AnySamplesConservative;1316case GL_COMMANDS_COMPLETED_CHROMIUM:1317return QueryType::CommandsCompleted;1318case GL_PRIMITIVES_GENERATED_EXT:1319return QueryType::PrimitivesGenerated;1320case GL_TIME_ELAPSED_EXT:1321return QueryType::TimeElapsed;1322case GL_TIMESTAMP_EXT:1323return QueryType::Timestamp;1324case GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN:1325return QueryType::TransformFeedbackPrimitivesWritten;1326default:1327return QueryType::InvalidEnum;1328}1329}13301331GLenum ToGLenum(QueryType from)1332{1333switch (from)1334{1335case QueryType::AnySamples:1336return GL_ANY_SAMPLES_PASSED;1337case QueryType::AnySamplesConservative:1338return GL_ANY_SAMPLES_PASSED_CONSERVATIVE;1339case QueryType::CommandsCompleted:1340return GL_COMMANDS_COMPLETED_CHROMIUM;1341case QueryType::PrimitivesGenerated:1342return GL_PRIMITIVES_GENERATED_EXT;1343case QueryType::TimeElapsed:1344return GL_TIME_ELAPSED_EXT;1345case QueryType::Timestamp:1346return GL_TIMESTAMP_EXT;1347case QueryType::TransformFeedbackPrimitivesWritten:1348return GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN;1349default:1350UNREACHABLE();1351return 0;1352}1353}13541355std::ostream &operator<<(std::ostream &os, QueryType value)1356{1357switch (value)1358{1359case QueryType::AnySamples:1360os << "GL_ANY_SAMPLES_PASSED";1361break;1362case QueryType::AnySamplesConservative:1363os << "GL_ANY_SAMPLES_PASSED_CONSERVATIVE";1364break;1365case QueryType::CommandsCompleted:1366os << "GL_COMMANDS_COMPLETED_CHROMIUM";1367break;1368case QueryType::PrimitivesGenerated:1369os << "GL_PRIMITIVES_GENERATED_EXT";1370break;1371case QueryType::TimeElapsed:1372os << "GL_TIME_ELAPSED_EXT";1373break;1374case QueryType::Timestamp:1375os << "GL_TIMESTAMP_EXT";1376break;1377case QueryType::TransformFeedbackPrimitivesWritten:1378os << "GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN";1379break;1380default:1381os << "GL_INVALID_ENUM";1382break;1383}1384return os;1385}13861387template <>1388ShaderType FromGLenum<ShaderType>(GLenum from)1389{1390switch (from)1391{1392case GL_VERTEX_SHADER:1393return ShaderType::Vertex;1394case GL_TESS_CONTROL_SHADER_EXT:1395return ShaderType::TessControl;1396case GL_TESS_EVALUATION_SHADER_EXT:1397return ShaderType::TessEvaluation;1398case GL_GEOMETRY_SHADER_EXT:1399return ShaderType::Geometry;1400case GL_FRAGMENT_SHADER:1401return ShaderType::Fragment;1402case GL_COMPUTE_SHADER:1403return ShaderType::Compute;1404default:1405return ShaderType::InvalidEnum;1406}1407}14081409GLenum ToGLenum(ShaderType from)1410{1411switch (from)1412{1413case ShaderType::Vertex:1414return GL_VERTEX_SHADER;1415case ShaderType::TessControl:1416return GL_TESS_CONTROL_SHADER_EXT;1417case ShaderType::TessEvaluation:1418return GL_TESS_EVALUATION_SHADER_EXT;1419case ShaderType::Geometry:1420return GL_GEOMETRY_SHADER_EXT;1421case ShaderType::Fragment:1422return GL_FRAGMENT_SHADER;1423case ShaderType::Compute:1424return GL_COMPUTE_SHADER;1425default:1426UNREACHABLE();1427return 0;1428}1429}14301431std::ostream &operator<<(std::ostream &os, ShaderType value)1432{1433switch (value)1434{1435case ShaderType::Vertex:1436os << "GL_VERTEX_SHADER";1437break;1438case ShaderType::TessControl:1439os << "GL_TESS_CONTROL_SHADER_EXT";1440break;1441case ShaderType::TessEvaluation:1442os << "GL_TESS_EVALUATION_SHADER_EXT";1443break;1444case ShaderType::Geometry:1445os << "GL_GEOMETRY_SHADER_EXT";1446break;1447case ShaderType::Fragment:1448os << "GL_FRAGMENT_SHADER";1449break;1450case ShaderType::Compute:1451os << "GL_COMPUTE_SHADER";1452break;1453default:1454os << "GL_INVALID_ENUM";1455break;1456}1457return os;1458}14591460template <>1461ShadingModel FromGLenum<ShadingModel>(GLenum from)1462{1463switch (from)1464{1465case GL_FLAT:1466return ShadingModel::Flat;1467case GL_SMOOTH:1468return ShadingModel::Smooth;1469default:1470return ShadingModel::InvalidEnum;1471}1472}14731474GLenum ToGLenum(ShadingModel from)1475{1476switch (from)1477{1478case ShadingModel::Flat:1479return GL_FLAT;1480case ShadingModel::Smooth:1481return GL_SMOOTH;1482default:1483UNREACHABLE();1484return 0;1485}1486}14871488std::ostream &operator<<(std::ostream &os, ShadingModel value)1489{1490switch (value)1491{1492case ShadingModel::Flat:1493os << "GL_FLAT";1494break;1495case ShadingModel::Smooth:1496os << "GL_SMOOTH";1497break;1498default:1499os << "GL_INVALID_ENUM";1500break;1501}1502return os;1503}15041505template <>1506TextureCombine FromGLenum<TextureCombine>(GLenum from)1507{1508switch (from)1509{1510case GL_ADD:1511return TextureCombine::Add;1512case GL_ADD_SIGNED:1513return TextureCombine::AddSigned;1514case GL_DOT3_RGB:1515return TextureCombine::Dot3Rgb;1516case GL_DOT3_RGBA:1517return TextureCombine::Dot3Rgba;1518case GL_INTERPOLATE:1519return TextureCombine::Interpolate;1520case GL_MODULATE:1521return TextureCombine::Modulate;1522case GL_REPLACE:1523return TextureCombine::Replace;1524case GL_SUBTRACT:1525return TextureCombine::Subtract;1526default:1527return TextureCombine::InvalidEnum;1528}1529}15301531GLenum ToGLenum(TextureCombine from)1532{1533switch (from)1534{1535case TextureCombine::Add:1536return GL_ADD;1537case TextureCombine::AddSigned:1538return GL_ADD_SIGNED;1539case TextureCombine::Dot3Rgb:1540return GL_DOT3_RGB;1541case TextureCombine::Dot3Rgba:1542return GL_DOT3_RGBA;1543case TextureCombine::Interpolate:1544return GL_INTERPOLATE;1545case TextureCombine::Modulate:1546return GL_MODULATE;1547case TextureCombine::Replace:1548return GL_REPLACE;1549case TextureCombine::Subtract:1550return GL_SUBTRACT;1551default:1552UNREACHABLE();1553return 0;1554}1555}15561557std::ostream &operator<<(std::ostream &os, TextureCombine value)1558{1559switch (value)1560{1561case TextureCombine::Add:1562os << "GL_ADD";1563break;1564case TextureCombine::AddSigned:1565os << "GL_ADD_SIGNED";1566break;1567case TextureCombine::Dot3Rgb:1568os << "GL_DOT3_RGB";1569break;1570case TextureCombine::Dot3Rgba:1571os << "GL_DOT3_RGBA";1572break;1573case TextureCombine::Interpolate:1574os << "GL_INTERPOLATE";1575break;1576case TextureCombine::Modulate:1577os << "GL_MODULATE";1578break;1579case TextureCombine::Replace:1580os << "GL_REPLACE";1581break;1582case TextureCombine::Subtract:1583os << "GL_SUBTRACT";1584break;1585default:1586os << "GL_INVALID_ENUM";1587break;1588}1589return os;1590}15911592template <>1593TextureEnvMode FromGLenum<TextureEnvMode>(GLenum from)1594{1595switch (from)1596{1597case GL_ADD:1598return TextureEnvMode::Add;1599case GL_BLEND:1600return TextureEnvMode::Blend;1601case GL_COMBINE:1602return TextureEnvMode::Combine;1603case GL_DECAL:1604return TextureEnvMode::Decal;1605case GL_MODULATE:1606return TextureEnvMode::Modulate;1607case GL_REPLACE:1608return TextureEnvMode::Replace;1609default:1610return TextureEnvMode::InvalidEnum;1611}1612}16131614GLenum ToGLenum(TextureEnvMode from)1615{1616switch (from)1617{1618case TextureEnvMode::Add:1619return GL_ADD;1620case TextureEnvMode::Blend:1621return GL_BLEND;1622case TextureEnvMode::Combine:1623return GL_COMBINE;1624case TextureEnvMode::Decal:1625return GL_DECAL;1626case TextureEnvMode::Modulate:1627return GL_MODULATE;1628case TextureEnvMode::Replace:1629return GL_REPLACE;1630default:1631UNREACHABLE();1632return 0;1633}1634}16351636std::ostream &operator<<(std::ostream &os, TextureEnvMode value)1637{1638switch (value)1639{1640case TextureEnvMode::Add:1641os << "GL_ADD";1642break;1643case TextureEnvMode::Blend:1644os << "GL_BLEND";1645break;1646case TextureEnvMode::Combine:1647os << "GL_COMBINE";1648break;1649case TextureEnvMode::Decal:1650os << "GL_DECAL";1651break;1652case TextureEnvMode::Modulate:1653os << "GL_MODULATE";1654break;1655case TextureEnvMode::Replace:1656os << "GL_REPLACE";1657break;1658default:1659os << "GL_INVALID_ENUM";1660break;1661}1662return os;1663}16641665template <>1666TextureEnvParameter FromGLenum<TextureEnvParameter>(GLenum from)1667{1668switch (from)1669{1670case GL_TEXTURE_ENV_MODE:1671return TextureEnvParameter::Mode;1672case GL_TEXTURE_ENV_COLOR:1673return TextureEnvParameter::Color;1674case GL_COMBINE_RGB:1675return TextureEnvParameter::CombineRgb;1676case GL_COMBINE_ALPHA:1677return TextureEnvParameter::CombineAlpha;1678case GL_RGB_SCALE:1679return TextureEnvParameter::RgbScale;1680case GL_ALPHA_SCALE:1681return TextureEnvParameter::AlphaScale;1682case GL_SRC0_RGB:1683return TextureEnvParameter::Src0Rgb;1684case GL_SRC1_RGB:1685return TextureEnvParameter::Src1Rgb;1686case GL_SRC2_RGB:1687return TextureEnvParameter::Src2Rgb;1688case GL_SRC0_ALPHA:1689return TextureEnvParameter::Src0Alpha;1690case GL_SRC1_ALPHA:1691return TextureEnvParameter::Src1Alpha;1692case GL_SRC2_ALPHA:1693return TextureEnvParameter::Src2Alpha;1694case GL_OPERAND0_RGB:1695return TextureEnvParameter::Op0Rgb;1696case GL_OPERAND1_RGB:1697return TextureEnvParameter::Op1Rgb;1698case GL_OPERAND2_RGB:1699return TextureEnvParameter::Op2Rgb;1700case GL_OPERAND0_ALPHA:1701return TextureEnvParameter::Op0Alpha;1702case GL_OPERAND1_ALPHA:1703return TextureEnvParameter::Op1Alpha;1704case GL_OPERAND2_ALPHA:1705return TextureEnvParameter::Op2Alpha;1706case GL_COORD_REPLACE_OES:1707return TextureEnvParameter::PointCoordReplace;1708default:1709return TextureEnvParameter::InvalidEnum;1710}1711}17121713GLenum ToGLenum(TextureEnvParameter from)1714{1715switch (from)1716{1717case TextureEnvParameter::Mode:1718return GL_TEXTURE_ENV_MODE;1719case TextureEnvParameter::Color:1720return GL_TEXTURE_ENV_COLOR;1721case TextureEnvParameter::CombineRgb:1722return GL_COMBINE_RGB;1723case TextureEnvParameter::CombineAlpha:1724return GL_COMBINE_ALPHA;1725case TextureEnvParameter::RgbScale:1726return GL_RGB_SCALE;1727case TextureEnvParameter::AlphaScale:1728return GL_ALPHA_SCALE;1729case TextureEnvParameter::Src0Rgb:1730return GL_SRC0_RGB;1731case TextureEnvParameter::Src1Rgb:1732return GL_SRC1_RGB;1733case TextureEnvParameter::Src2Rgb:1734return GL_SRC2_RGB;1735case TextureEnvParameter::Src0Alpha:1736return GL_SRC0_ALPHA;1737case TextureEnvParameter::Src1Alpha:1738return GL_SRC1_ALPHA;1739case TextureEnvParameter::Src2Alpha:1740return GL_SRC2_ALPHA;1741case TextureEnvParameter::Op0Rgb:1742return GL_OPERAND0_RGB;1743case TextureEnvParameter::Op1Rgb:1744return GL_OPERAND1_RGB;1745case TextureEnvParameter::Op2Rgb:1746return GL_OPERAND2_RGB;1747case TextureEnvParameter::Op0Alpha:1748return GL_OPERAND0_ALPHA;1749case TextureEnvParameter::Op1Alpha:1750return GL_OPERAND1_ALPHA;1751case TextureEnvParameter::Op2Alpha:1752return GL_OPERAND2_ALPHA;1753case TextureEnvParameter::PointCoordReplace:1754return GL_COORD_REPLACE_OES;1755default:1756UNREACHABLE();1757return 0;1758}1759}17601761std::ostream &operator<<(std::ostream &os, TextureEnvParameter value)1762{1763switch (value)1764{1765case TextureEnvParameter::Mode:1766os << "GL_TEXTURE_ENV_MODE";1767break;1768case TextureEnvParameter::Color:1769os << "GL_TEXTURE_ENV_COLOR";1770break;1771case TextureEnvParameter::CombineRgb:1772os << "GL_COMBINE_RGB";1773break;1774case TextureEnvParameter::CombineAlpha:1775os << "GL_COMBINE_ALPHA";1776break;1777case TextureEnvParameter::RgbScale:1778os << "GL_RGB_SCALE";1779break;1780case TextureEnvParameter::AlphaScale:1781os << "GL_ALPHA_SCALE";1782break;1783case TextureEnvParameter::Src0Rgb:1784os << "GL_SRC0_RGB";1785break;1786case TextureEnvParameter::Src1Rgb:1787os << "GL_SRC1_RGB";1788break;1789case TextureEnvParameter::Src2Rgb:1790os << "GL_SRC2_RGB";1791break;1792case TextureEnvParameter::Src0Alpha:1793os << "GL_SRC0_ALPHA";1794break;1795case TextureEnvParameter::Src1Alpha:1796os << "GL_SRC1_ALPHA";1797break;1798case TextureEnvParameter::Src2Alpha:1799os << "GL_SRC2_ALPHA";1800break;1801case TextureEnvParameter::Op0Rgb:1802os << "GL_OPERAND0_RGB";1803break;1804case TextureEnvParameter::Op1Rgb:1805os << "GL_OPERAND1_RGB";1806break;1807case TextureEnvParameter::Op2Rgb:1808os << "GL_OPERAND2_RGB";1809break;1810case TextureEnvParameter::Op0Alpha:1811os << "GL_OPERAND0_ALPHA";1812break;1813case TextureEnvParameter::Op1Alpha:1814os << "GL_OPERAND1_ALPHA";1815break;1816case TextureEnvParameter::Op2Alpha:1817os << "GL_OPERAND2_ALPHA";1818break;1819case TextureEnvParameter::PointCoordReplace:1820os << "GL_COORD_REPLACE_OES";1821break;1822default:1823os << "GL_INVALID_ENUM";1824break;1825}1826return os;1827}18281829template <>1830TextureEnvTarget FromGLenum<TextureEnvTarget>(GLenum from)1831{1832switch (from)1833{1834case GL_TEXTURE_ENV:1835return TextureEnvTarget::Env;1836case GL_POINT_SPRITE_OES:1837return TextureEnvTarget::PointSprite;1838default:1839return TextureEnvTarget::InvalidEnum;1840}1841}18421843GLenum ToGLenum(TextureEnvTarget from)1844{1845switch (from)1846{1847case TextureEnvTarget::Env:1848return GL_TEXTURE_ENV;1849case TextureEnvTarget::PointSprite:1850return GL_POINT_SPRITE_OES;1851default:1852UNREACHABLE();1853return 0;1854}1855}18561857std::ostream &operator<<(std::ostream &os, TextureEnvTarget value)1858{1859switch (value)1860{1861case TextureEnvTarget::Env:1862os << "GL_TEXTURE_ENV";1863break;1864case TextureEnvTarget::PointSprite:1865os << "GL_POINT_SPRITE_OES";1866break;1867default:1868os << "GL_INVALID_ENUM";1869break;1870}1871return os;1872}18731874template <>1875TextureOp FromGLenum<TextureOp>(GLenum from)1876{1877switch (from)1878{1879case GL_ONE_MINUS_SRC_ALPHA:1880return TextureOp::OneMinusSrcAlpha;1881case GL_ONE_MINUS_SRC_COLOR:1882return TextureOp::OneMinusSrcColor;1883case GL_SRC_ALPHA:1884return TextureOp::SrcAlpha;1885case GL_SRC_COLOR:1886return TextureOp::SrcColor;1887default:1888return TextureOp::InvalidEnum;1889}1890}18911892GLenum ToGLenum(TextureOp from)1893{1894switch (from)1895{1896case TextureOp::OneMinusSrcAlpha:1897return GL_ONE_MINUS_SRC_ALPHA;1898case TextureOp::OneMinusSrcColor:1899return GL_ONE_MINUS_SRC_COLOR;1900case TextureOp::SrcAlpha:1901return GL_SRC_ALPHA;1902case TextureOp::SrcColor:1903return GL_SRC_COLOR;1904default:1905UNREACHABLE();1906return 0;1907}1908}19091910std::ostream &operator<<(std::ostream &os, TextureOp value)1911{1912switch (value)1913{1914case TextureOp::OneMinusSrcAlpha:1915os << "GL_ONE_MINUS_SRC_ALPHA";1916break;1917case TextureOp::OneMinusSrcColor:1918os << "GL_ONE_MINUS_SRC_COLOR";1919break;1920case TextureOp::SrcAlpha:1921os << "GL_SRC_ALPHA";1922break;1923case TextureOp::SrcColor:1924os << "GL_SRC_COLOR";1925break;1926default:1927os << "GL_INVALID_ENUM";1928break;1929}1930return os;1931}19321933template <>1934TextureSrc FromGLenum<TextureSrc>(GLenum from)1935{1936switch (from)1937{1938case GL_CONSTANT:1939return TextureSrc::Constant;1940case GL_PREVIOUS:1941return TextureSrc::Previous;1942case GL_PRIMARY_COLOR:1943return TextureSrc::PrimaryColor;1944case GL_TEXTURE:1945return TextureSrc::Texture;1946default:1947return TextureSrc::InvalidEnum;1948}1949}19501951GLenum ToGLenum(TextureSrc from)1952{1953switch (from)1954{1955case TextureSrc::Constant:1956return GL_CONSTANT;1957case TextureSrc::Previous:1958return GL_PREVIOUS;1959case TextureSrc::PrimaryColor:1960return GL_PRIMARY_COLOR;1961case TextureSrc::Texture:1962return GL_TEXTURE;1963default:1964UNREACHABLE();1965return 0;1966}1967}19681969std::ostream &operator<<(std::ostream &os, TextureSrc value)1970{1971switch (value)1972{1973case TextureSrc::Constant:1974os << "GL_CONSTANT";1975break;1976case TextureSrc::Previous:1977os << "GL_PREVIOUS";1978break;1979case TextureSrc::PrimaryColor:1980os << "GL_PRIMARY_COLOR";1981break;1982case TextureSrc::Texture:1983os << "GL_TEXTURE";1984break;1985default:1986os << "GL_INVALID_ENUM";1987break;1988}1989return os;1990}19911992template <>1993TextureTarget FromGLenum<TextureTarget>(GLenum from)1994{1995switch (from)1996{1997case GL_TEXTURE_2D:1998return TextureTarget::_2D;1999case GL_TEXTURE_2D_ARRAY:2000return TextureTarget::_2DArray;2001case GL_TEXTURE_2D_MULTISAMPLE:2002return TextureTarget::_2DMultisample;2003case GL_TEXTURE_2D_MULTISAMPLE_ARRAY_OES:2004return TextureTarget::_2DMultisampleArray;2005case GL_TEXTURE_3D:2006return TextureTarget::_3D;2007case GL_TEXTURE_EXTERNAL_OES:2008return TextureTarget::External;2009case GL_TEXTURE_RECTANGLE_ANGLE:2010return TextureTarget::Rectangle;2011case GL_TEXTURE_CUBE_MAP_POSITIVE_X:2012return TextureTarget::CubeMapPositiveX;2013case GL_TEXTURE_CUBE_MAP_NEGATIVE_X:2014return TextureTarget::CubeMapNegativeX;2015case GL_TEXTURE_CUBE_MAP_POSITIVE_Y:2016return TextureTarget::CubeMapPositiveY;2017case GL_TEXTURE_CUBE_MAP_NEGATIVE_Y:2018return TextureTarget::CubeMapNegativeY;2019case GL_TEXTURE_CUBE_MAP_POSITIVE_Z:2020return TextureTarget::CubeMapPositiveZ;2021case GL_TEXTURE_CUBE_MAP_NEGATIVE_Z:2022return TextureTarget::CubeMapNegativeZ;2023case GL_TEXTURE_CUBE_MAP_ARRAY:2024return TextureTarget::CubeMapArray;2025case GL_TEXTURE_VIDEO_IMAGE_WEBGL:2026return TextureTarget::VideoImage;2027case GL_TEXTURE_BUFFER:2028return TextureTarget::Buffer;2029default:2030return TextureTarget::InvalidEnum;2031}2032}20332034GLenum ToGLenum(TextureTarget from)2035{2036switch (from)2037{2038case TextureTarget::_2D:2039return GL_TEXTURE_2D;2040case TextureTarget::_2DArray:2041return GL_TEXTURE_2D_ARRAY;2042case TextureTarget::_2DMultisample:2043return GL_TEXTURE_2D_MULTISAMPLE;2044case TextureTarget::_2DMultisampleArray:2045return GL_TEXTURE_2D_MULTISAMPLE_ARRAY_OES;2046case TextureTarget::_3D:2047return GL_TEXTURE_3D;2048case TextureTarget::External:2049return GL_TEXTURE_EXTERNAL_OES;2050case TextureTarget::Rectangle:2051return GL_TEXTURE_RECTANGLE_ANGLE;2052case TextureTarget::CubeMapPositiveX:2053return GL_TEXTURE_CUBE_MAP_POSITIVE_X;2054case TextureTarget::CubeMapNegativeX:2055return GL_TEXTURE_CUBE_MAP_NEGATIVE_X;2056case TextureTarget::CubeMapPositiveY:2057return GL_TEXTURE_CUBE_MAP_POSITIVE_Y;2058case TextureTarget::CubeMapNegativeY:2059return GL_TEXTURE_CUBE_MAP_NEGATIVE_Y;2060case TextureTarget::CubeMapPositiveZ:2061return GL_TEXTURE_CUBE_MAP_POSITIVE_Z;2062case TextureTarget::CubeMapNegativeZ:2063return GL_TEXTURE_CUBE_MAP_NEGATIVE_Z;2064case TextureTarget::CubeMapArray:2065return GL_TEXTURE_CUBE_MAP_ARRAY;2066case TextureTarget::VideoImage:2067return GL_TEXTURE_VIDEO_IMAGE_WEBGL;2068case TextureTarget::Buffer:2069return GL_TEXTURE_BUFFER;2070default:2071UNREACHABLE();2072return 0;2073}2074}20752076std::ostream &operator<<(std::ostream &os, TextureTarget value)2077{2078switch (value)2079{2080case TextureTarget::_2D:2081os << "GL_TEXTURE_2D";2082break;2083case TextureTarget::_2DArray:2084os << "GL_TEXTURE_2D_ARRAY";2085break;2086case TextureTarget::_2DMultisample:2087os << "GL_TEXTURE_2D_MULTISAMPLE";2088break;2089case TextureTarget::_2DMultisampleArray:2090os << "GL_TEXTURE_2D_MULTISAMPLE_ARRAY_OES";2091break;2092case TextureTarget::_3D:2093os << "GL_TEXTURE_3D";2094break;2095case TextureTarget::External:2096os << "GL_TEXTURE_EXTERNAL_OES";2097break;2098case TextureTarget::Rectangle:2099os << "GL_TEXTURE_RECTANGLE_ANGLE";2100break;2101case TextureTarget::CubeMapPositiveX:2102os << "GL_TEXTURE_CUBE_MAP_POSITIVE_X";2103break;2104case TextureTarget::CubeMapNegativeX:2105os << "GL_TEXTURE_CUBE_MAP_NEGATIVE_X";2106break;2107case TextureTarget::CubeMapPositiveY:2108os << "GL_TEXTURE_CUBE_MAP_POSITIVE_Y";2109break;2110case TextureTarget::CubeMapNegativeY:2111os << "GL_TEXTURE_CUBE_MAP_NEGATIVE_Y";2112break;2113case TextureTarget::CubeMapPositiveZ:2114os << "GL_TEXTURE_CUBE_MAP_POSITIVE_Z";2115break;2116case TextureTarget::CubeMapNegativeZ:2117os << "GL_TEXTURE_CUBE_MAP_NEGATIVE_Z";2118break;2119case TextureTarget::CubeMapArray:2120os << "GL_TEXTURE_CUBE_MAP_ARRAY";2121break;2122case TextureTarget::VideoImage:2123os << "GL_TEXTURE_VIDEO_IMAGE_WEBGL";2124break;2125case TextureTarget::Buffer:2126os << "GL_TEXTURE_BUFFER";2127break;2128default:2129os << "GL_INVALID_ENUM";2130break;2131}2132return os;2133}21342135template <>2136TextureType FromGLenum<TextureType>(GLenum from)2137{2138switch (from)2139{2140case GL_TEXTURE_2D:2141return TextureType::_2D;2142case GL_TEXTURE_2D_ARRAY:2143return TextureType::_2DArray;2144case GL_TEXTURE_2D_MULTISAMPLE:2145return TextureType::_2DMultisample;2146case GL_TEXTURE_2D_MULTISAMPLE_ARRAY_OES:2147return TextureType::_2DMultisampleArray;2148case GL_TEXTURE_3D:2149return TextureType::_3D;2150case GL_TEXTURE_EXTERNAL_OES:2151return TextureType::External;2152case GL_TEXTURE_RECTANGLE_ANGLE:2153return TextureType::Rectangle;2154case GL_TEXTURE_CUBE_MAP:2155return TextureType::CubeMap;2156case GL_TEXTURE_CUBE_MAP_ARRAY:2157return TextureType::CubeMapArray;2158case GL_TEXTURE_VIDEO_IMAGE_WEBGL:2159return TextureType::VideoImage;2160case GL_TEXTURE_BUFFER:2161return TextureType::Buffer;2162default:2163return TextureType::InvalidEnum;2164}2165}21662167GLenum ToGLenum(TextureType from)2168{2169switch (from)2170{2171case TextureType::_2D:2172return GL_TEXTURE_2D;2173case TextureType::_2DArray:2174return GL_TEXTURE_2D_ARRAY;2175case TextureType::_2DMultisample:2176return GL_TEXTURE_2D_MULTISAMPLE;2177case TextureType::_2DMultisampleArray:2178return GL_TEXTURE_2D_MULTISAMPLE_ARRAY_OES;2179case TextureType::_3D:2180return GL_TEXTURE_3D;2181case TextureType::External:2182return GL_TEXTURE_EXTERNAL_OES;2183case TextureType::Rectangle:2184return GL_TEXTURE_RECTANGLE_ANGLE;2185case TextureType::CubeMap:2186return GL_TEXTURE_CUBE_MAP;2187case TextureType::CubeMapArray:2188return GL_TEXTURE_CUBE_MAP_ARRAY;2189case TextureType::VideoImage:2190return GL_TEXTURE_VIDEO_IMAGE_WEBGL;2191case TextureType::Buffer:2192return GL_TEXTURE_BUFFER;2193default:2194UNREACHABLE();2195return 0;2196}2197}21982199std::ostream &operator<<(std::ostream &os, TextureType value)2200{2201switch (value)2202{2203case TextureType::_2D:2204os << "GL_TEXTURE_2D";2205break;2206case TextureType::_2DArray:2207os << "GL_TEXTURE_2D_ARRAY";2208break;2209case TextureType::_2DMultisample:2210os << "GL_TEXTURE_2D_MULTISAMPLE";2211break;2212case TextureType::_2DMultisampleArray:2213os << "GL_TEXTURE_2D_MULTISAMPLE_ARRAY_OES";2214break;2215case TextureType::_3D:2216os << "GL_TEXTURE_3D";2217break;2218case TextureType::External:2219os << "GL_TEXTURE_EXTERNAL_OES";2220break;2221case TextureType::Rectangle:2222os << "GL_TEXTURE_RECTANGLE_ANGLE";2223break;2224case TextureType::CubeMap:2225os << "GL_TEXTURE_CUBE_MAP";2226break;2227case TextureType::CubeMapArray:2228os << "GL_TEXTURE_CUBE_MAP_ARRAY";2229break;2230case TextureType::VideoImage:2231os << "GL_TEXTURE_VIDEO_IMAGE_WEBGL";2232break;2233case TextureType::Buffer:2234os << "GL_TEXTURE_BUFFER";2235break;2236default:2237os << "GL_INVALID_ENUM";2238break;2239}2240return os;2241}22422243template <>2244VertexArrayType FromGLenum<VertexArrayType>(GLenum from)2245{2246switch (from)2247{2248case GL_COLOR_ARRAY:2249return VertexArrayType::Color;2250case GL_NORMAL_ARRAY:2251return VertexArrayType::Normal;2252case GL_POINT_SIZE_ARRAY_OES:2253return VertexArrayType::PointSize;2254case GL_TEXTURE_COORD_ARRAY:2255return VertexArrayType::TextureCoord;2256case GL_VERTEX_ARRAY:2257return VertexArrayType::Vertex;2258default:2259return VertexArrayType::InvalidEnum;2260}2261}22622263GLenum ToGLenum(VertexArrayType from)2264{2265switch (from)2266{2267case VertexArrayType::Color:2268return GL_COLOR_ARRAY;2269case VertexArrayType::Normal:2270return GL_NORMAL_ARRAY;2271case VertexArrayType::PointSize:2272return GL_POINT_SIZE_ARRAY_OES;2273case VertexArrayType::TextureCoord:2274return GL_TEXTURE_COORD_ARRAY;2275case VertexArrayType::Vertex:2276return GL_VERTEX_ARRAY;2277default:2278UNREACHABLE();2279return 0;2280}2281}22822283std::ostream &operator<<(std::ostream &os, VertexArrayType value)2284{2285switch (value)2286{2287case VertexArrayType::Color:2288os << "GL_COLOR_ARRAY";2289break;2290case VertexArrayType::Normal:2291os << "GL_NORMAL_ARRAY";2292break;2293case VertexArrayType::PointSize:2294os << "GL_POINT_SIZE_ARRAY_OES";2295break;2296case VertexArrayType::TextureCoord:2297os << "GL_TEXTURE_COORD_ARRAY";2298break;2299case VertexArrayType::Vertex:2300os << "GL_VERTEX_ARRAY";2301break;2302default:2303os << "GL_INVALID_ENUM";2304break;2305}2306return os;2307}23082309template <>2310WrapMode FromGLenum<WrapMode>(GLenum from)2311{2312switch (from)2313{2314case GL_CLAMP_TO_EDGE:2315return WrapMode::ClampToEdge;2316case GL_CLAMP_TO_BORDER:2317return WrapMode::ClampToBorder;2318case GL_MIRRORED_REPEAT:2319return WrapMode::MirroredRepeat;2320case GL_REPEAT:2321return WrapMode::Repeat;2322default:2323return WrapMode::InvalidEnum;2324}2325}23262327GLenum ToGLenum(WrapMode from)2328{2329switch (from)2330{2331case WrapMode::ClampToEdge:2332return GL_CLAMP_TO_EDGE;2333case WrapMode::ClampToBorder:2334return GL_CLAMP_TO_BORDER;2335case WrapMode::MirroredRepeat:2336return GL_MIRRORED_REPEAT;2337case WrapMode::Repeat:2338return GL_REPEAT;2339default:2340UNREACHABLE();2341return 0;2342}2343}23442345std::ostream &operator<<(std::ostream &os, WrapMode value)2346{2347switch (value)2348{2349case WrapMode::ClampToEdge:2350os << "GL_CLAMP_TO_EDGE";2351break;2352case WrapMode::ClampToBorder:2353os << "GL_CLAMP_TO_BORDER";2354break;2355case WrapMode::MirroredRepeat:2356os << "GL_MIRRORED_REPEAT";2357break;2358case WrapMode::Repeat:2359os << "GL_REPEAT";2360break;2361default:2362os << "GL_INVALID_ENUM";2363break;2364}2365return os;2366}23672368} // namespace gl236923702371