| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (C) 2009 Apple Inc. All rights reserved. | 2 * Copyright (C) 2009 Apple Inc. All rights reserved. |
| 3 * | 3 * |
| 4 * Redistribution and use in source and binary forms, with or without | 4 * Redistribution and use in source and binary forms, with or without |
| 5 * modification, are permitted provided that the following conditions | 5 * modification, are permitted provided that the following conditions |
| 6 * are met: | 6 * are met: |
| 7 * 1. Redistributions of source code must retain the above copyright | 7 * 1. Redistributions of source code must retain the above copyright |
| 8 * notice, this list of conditions and the following disclaimer. | 8 * notice, this list of conditions and the following disclaimer. |
| 9 * 2. Redistributions in binary form must reproduce the above copyright | 9 * 2. Redistributions in binary form must reproduce the above copyright |
| 10 * notice, this list of conditions and the following disclaimer in the | 10 * notice, this list of conditions and the following disclaimer in the |
| (...skipping 515 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 526 | 526 |
| 527 bool m_multisamplingAllowed; | 527 bool m_multisamplingAllowed; |
| 528 bool m_multisamplingObserverRegistered; | 528 bool m_multisamplingObserverRegistered; |
| 529 | 529 |
| 530 GLuint m_onePlusMaxEnabledAttribIndex; | 530 GLuint m_onePlusMaxEnabledAttribIndex; |
| 531 unsigned long m_onePlusMaxNonDefaultTextureUnit; | 531 unsigned long m_onePlusMaxNonDefaultTextureUnit; |
| 532 | 532 |
| 533 OwnPtr<Extensions3DUtil> m_extensionsUtil; | 533 OwnPtr<Extensions3DUtil> m_extensionsUtil; |
| 534 | 534 |
| 535 enum ExtensionFlags { | 535 enum ExtensionFlags { |
| 536 ApprovedExtension = 0x00, | 536 ApprovedExtension = 0x00, |
| 537 DraftExtension = 0x01, | 537 // Extension that is behind the draft extensions runtime flag: |
| 538 PrivilegedExtension = 0x02, | 538 DraftExtension = 0x01, |
| 539 PrefixedExtension = 0x04, | 539 PrivilegedExtension = 0x02, |
| 540 // Extension that is still in draft state, but has been selectively enab
led by default under a prefix. Do not use |
| 541 // this for enabling new draft extensions; use the DraftExtension flag i
nstead, and do not use vendor prefixes: |
| 542 EnabledDraftExtension = 0x04, |
| 540 WebGLDebugRendererInfoExtension = 0x08, | 543 WebGLDebugRendererInfoExtension = 0x08, |
| 541 }; | 544 }; |
| 542 | 545 |
| 543 class ExtensionTracker { | 546 class ExtensionTracker { |
| 544 public: | 547 public: |
| 545 ExtensionTracker(ExtensionFlags flags, const char* const* prefixes) | 548 ExtensionTracker(ExtensionFlags flags, const char* const* prefixes) |
| 546 : m_privileged(flags & PrivilegedExtension) | 549 : m_privileged(flags & PrivilegedExtension) |
| 547 , m_draft(flags & DraftExtension) | 550 , m_draft(flags & DraftExtension) |
| 548 , m_prefixed(flags & PrefixedExtension) | |
| 549 , m_webglDebugRendererInfo(flags & WebGLDebugRendererInfoExtension) | 551 , m_webglDebugRendererInfo(flags & WebGLDebugRendererInfoExtension) |
| 550 , m_prefixes(prefixes) | 552 , m_prefixes(prefixes) |
| 551 { | 553 { |
| 552 } | 554 } |
| 553 | 555 |
| 554 virtual ~ExtensionTracker() | 556 virtual ~ExtensionTracker() |
| 555 { | 557 { |
| 556 } | 558 } |
| 557 | 559 |
| 558 bool prefixed() const | |
| 559 { | |
| 560 return m_prefixed; | |
| 561 } | |
| 562 | |
| 563 bool privileged() const | 560 bool privileged() const |
| 564 { | 561 { |
| 565 return m_privileged; | 562 return m_privileged; |
| 566 } | 563 } |
| 567 | 564 |
| 568 bool draft() const | 565 bool draft() const |
| 569 { | 566 { |
| 570 return m_draft; | 567 return m_draft; |
| 571 } | 568 } |
| 572 | 569 |
| 573 bool webglDebugRendererInfo() const | 570 bool webglDebugRendererInfo() const |
| 574 { | 571 { |
| 575 return m_webglDebugRendererInfo; | 572 return m_webglDebugRendererInfo; |
| 576 } | 573 } |
| 577 | 574 |
| 575 const char* const* prefixes() const; |
| 578 bool matchesNameWithPrefixes(const String&) const; | 576 bool matchesNameWithPrefixes(const String&) const; |
| 579 | 577 |
| 580 virtual PassRefPtr<WebGLExtension> getExtension(WebGLRenderingContextBas
e*) = 0; | 578 virtual PassRefPtr<WebGLExtension> getExtension(WebGLRenderingContextBas
e*) = 0; |
| 581 virtual bool supported(WebGLRenderingContextBase*) const = 0; | 579 virtual bool supported(WebGLRenderingContextBase*) const = 0; |
| 582 virtual const char* extensionName() const = 0; | 580 virtual const char* extensionName() const = 0; |
| 583 virtual void loseExtension() = 0; | 581 virtual void loseExtension() = 0; |
| 584 | 582 |
| 585 private: | 583 private: |
| 586 bool m_privileged; | 584 bool m_privileged; |
| 587 bool m_draft; | 585 bool m_draft; |
| 588 bool m_prefixed; | |
| 589 bool m_webglDebugRendererInfo; | 586 bool m_webglDebugRendererInfo; |
| 590 const char* const* m_prefixes; | 587 const char* const* m_prefixes; |
| 591 }; | 588 }; |
| 592 | 589 |
| 593 template <typename T> | 590 template <typename T> |
| 594 class TypedExtensionTracker FINAL : public ExtensionTracker { | 591 class TypedExtensionTracker FINAL : public ExtensionTracker { |
| 595 public: | 592 public: |
| 596 TypedExtensionTracker(RefPtr<T>& extensionField, ExtensionFlags flags, c
onst char* const* prefixes) | 593 TypedExtensionTracker(RefPtr<T>& extensionField, ExtensionFlags flags, c
onst char* const* prefixes) |
| 597 : ExtensionTracker(flags, prefixes) | 594 : ExtensionTracker(flags, prefixes) |
| 598 , m_extensionField(extensionField) | 595 , m_extensionField(extensionField) |
| (...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 646 | 643 |
| 647 bool m_extensionEnabled[WebGLExtensionNameCount]; | 644 bool m_extensionEnabled[WebGLExtensionNameCount]; |
| 648 Vector<ExtensionTracker*> m_extensions; | 645 Vector<ExtensionTracker*> m_extensions; |
| 649 | 646 |
| 650 template <typename T> | 647 template <typename T> |
| 651 void registerExtension(RefPtr<T>& extensionPtr, ExtensionFlags flags = Appro
vedExtension, const char* const* prefixes = 0) | 648 void registerExtension(RefPtr<T>& extensionPtr, ExtensionFlags flags = Appro
vedExtension, const char* const* prefixes = 0) |
| 652 { | 649 { |
| 653 m_extensions.append(new TypedExtensionTracker<T>(extensionPtr, flags, pr
efixes)); | 650 m_extensions.append(new TypedExtensionTracker<T>(extensionPtr, flags, pr
efixes)); |
| 654 } | 651 } |
| 655 | 652 |
| 653 bool extensionSupportedAndAllowed(const ExtensionTracker*); |
| 654 |
| 656 inline bool extensionEnabled(WebGLExtensionName name) | 655 inline bool extensionEnabled(WebGLExtensionName name) |
| 657 { | 656 { |
| 658 return m_extensionEnabled[name]; | 657 return m_extensionEnabled[name]; |
| 659 } | 658 } |
| 660 | 659 |
| 661 // Errors raised by synthesizeGLError() while the context is lost. | 660 // Errors raised by synthesizeGLError() while the context is lost. |
| 662 Vector<GLenum> m_lostContextErrors; | 661 Vector<GLenum> m_lostContextErrors; |
| 663 | 662 |
| 664 // Helpers for getParameter and others | 663 // Helpers for getParameter and others |
| 665 WebGLGetInfo getBooleanParameter(GLenum); | 664 WebGLGetInfo getBooleanParameter(GLenum); |
| (...skipping 251 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 917 // If the vector is empty, return the maximum allowed active context number. | 916 // If the vector is empty, return the maximum allowed active context number. |
| 918 static size_t oldestContextIndex(); | 917 static size_t oldestContextIndex(); |
| 919 static IntSize oldestContextSize(); | 918 static IntSize oldestContextSize(); |
| 920 }; | 919 }; |
| 921 | 920 |
| 922 DEFINE_TYPE_CASTS(WebGLRenderingContextBase, CanvasRenderingContext, context, co
ntext->is3d(), context.is3d()); | 921 DEFINE_TYPE_CASTS(WebGLRenderingContextBase, CanvasRenderingContext, context, co
ntext->is3d(), context.is3d()); |
| 923 | 922 |
| 924 } // namespace WebCore | 923 } // namespace WebCore |
| 925 | 924 |
| 926 #endif // WebGLRenderingContextBase_h | 925 #endif // WebGLRenderingContextBase_h |
| OLD | NEW |