Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(70)

Side by Side Diff: tools/gpu/gl/debug/DebugGLTestContext.cpp

Issue 2081183002: Support texel and draw-indirect buffers in null GL contexts (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: Created 4 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « src/gpu/gl/GrGLCreateNullInterface.cpp ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 1
2 /* 2 /*
3 * Copyright 2012 Google Inc. 3 * Copyright 2012 Google Inc.
4 * 4 *
5 * Use of this source code is governed by a BSD-style license that can be 5 * Use of this source code is governed by a BSD-style license that can be
6 * found in the LICENSE file. 6 * found in the LICENSE file.
7 */ 7 */
8 8
9 #include "DebugGLTestContext.h" 9 #include "DebugGLTestContext.h"
10 10
(...skipping 17 matching lines...) Expand all
28 28
29 // Helper macro to make creating an object (where you need to get back a derived type) easier 29 // Helper macro to make creating an object (where you need to get back a derived type) easier
30 #define FIND(id, className, classEnum) \ 30 #define FIND(id, className, classEnum) \
31 reinterpret_cast<className *>(this->findObject(id, classEnum)) 31 reinterpret_cast<className *>(this->findObject(id, classEnum))
32 32
33 class DebugInterface : public GrGLTestInterface { 33 class DebugInterface : public GrGLTestInterface {
34 public: 34 public:
35 DebugInterface() 35 DebugInterface()
36 : fCurrGenericID(0) 36 : fCurrGenericID(0)
37 , fCurrTextureUnit(0) 37 , fCurrTextureUnit(0)
38 , fArrayBuffer(nullptr)
39 , fElementArrayBuffer(nullptr)
40 , fVertexArray(nullptr) 38 , fVertexArray(nullptr)
41 , fPackRowLength(0) 39 , fPackRowLength(0)
42 , fUnpackRowLength(0) 40 , fUnpackRowLength(0)
43 , fPackAlignment(4) 41 , fPackAlignment(4)
44 , fFrameBuffer(nullptr) 42 , fFrameBuffer(nullptr)
45 , fRenderBuffer(nullptr) 43 , fRenderBuffer(nullptr)
46 , fProgram(nullptr) 44 , fProgram(nullptr)
47 , fAbandoned(false) { 45 , fAbandoned(false) {
48 for (int i = 0; i < kDefaultMaxTextureUnits; ++i) { 46 for (int i = 0; i < kDefaultMaxTextureUnits; ++i) {
49 fTextureUnits[i] = 47 fTextureUnits[i] =
50 reinterpret_cast<GrTextureUnitObj*>(this->createObj(kTextureUnit _ObjTypes)); 48 reinterpret_cast<GrTextureUnitObj*>(this->createObj(kTextureUnit _ObjTypes));
51 fTextureUnits[i]->ref(); 49 fTextureUnits[i]->ref();
52 fTextureUnits[i]->setNumber(i); 50 fTextureUnits[i]->setNumber(i);
53 } 51 }
52 memset(fBoundBuffers, 0, sizeof(fBoundBuffers));
54 this->init(kGL_GrGLStandard); 53 this->init(kGL_GrGLStandard);
55 } 54 }
56 55
57 ~DebugInterface() override { 56 ~DebugInterface() override {
58 // unref & delete the texture units first so they don't show up on the l eak report 57 // unref & delete the texture units first so they don't show up on the l eak report
59 for (int i = 0; i < kDefaultMaxTextureUnits; ++i) { 58 for (int i = 0; i < kDefaultMaxTextureUnits; ++i) {
60 fTextureUnits[i]->unref(); 59 fTextureUnits[i]->unref();
61 fTextureUnits[i]->deleteAction(); 60 fTextureUnits[i]->deleteAction();
62 } 61 }
63 for (int i = 0; i < fObjects.count(); ++i) { 62 for (int i = 0; i < fObjects.count(); ++i) {
64 delete fObjects[i]; 63 delete fObjects[i];
65 } 64 }
66 fObjects.reset(); 65 fObjects.reset();
67 66
68 fArrayBuffer = nullptr; 67 memset(fBoundBuffers, 0, sizeof(fBoundBuffers));
69 fElementArrayBuffer = nullptr;
70 fVertexArray = nullptr; 68 fVertexArray = nullptr;
71 69
72 this->report(); 70 this->report();
73 } 71 }
74 72
75 void abandon() const override { fAbandoned = true; } 73 void abandon() const override { fAbandoned = true; }
76 74
77 GrGLvoid activeTexture(GrGLenum texture) override { 75 GrGLvoid activeTexture(GrGLenum texture) override {
78 // Ganesh offsets the texture unit indices 76 // Ganesh offsets the texture unit indices
79 texture -= GR_GL_TEXTURE0; 77 texture -= GR_GL_TEXTURE0;
(...skipping 20 matching lines...) Expand all
100 98
101 // a textureID of 0 is acceptable - it binds to the default texture targ et 99 // a textureID of 0 is acceptable - it binds to the default texture targ et
102 GrTextureObj *texture = FIND(textureID, GrTextureObj, kTexture_ObjTypes) ; 100 GrTextureObj *texture = FIND(textureID, GrTextureObj, kTexture_ObjTypes) ;
103 101
104 this->setTexture(texture); 102 this->setTexture(texture);
105 } 103 }
106 104
107 //////////////////////////////////////////////////////////////////////////// //// 105 //////////////////////////////////////////////////////////////////////////// ////
108 GrGLvoid bufferData(GrGLenum target, GrGLsizeiptr size, const GrGLvoid* data , 106 GrGLvoid bufferData(GrGLenum target, GrGLsizeiptr size, const GrGLvoid* data ,
109 GrGLenum usage) override { 107 GrGLenum usage) override {
110 GrAlwaysAssert(GR_GL_ARRAY_BUFFER == target ||
111 GR_GL_ELEMENT_ARRAY_BUFFER == target);
112 GrAlwaysAssert(size >= 0); 108 GrAlwaysAssert(size >= 0);
113 GrAlwaysAssert(GR_GL_STREAM_DRAW == usage || 109 GrAlwaysAssert(GR_GL_STREAM_DRAW == usage ||
114 GR_GL_STATIC_DRAW == usage || 110 GR_GL_STATIC_DRAW == usage ||
115 GR_GL_DYNAMIC_DRAW == usage); 111 GR_GL_DYNAMIC_DRAW == usage);
116 112
117 GrBufferObj *buffer = nullptr; 113 GrBufferObj *buffer = fBoundBuffers[GetBufferIndex(target)];
118 switch (target) {
119 case GR_GL_ARRAY_BUFFER:
120 buffer = this->getArrayBuffer();
121 break;
122 case GR_GL_ELEMENT_ARRAY_BUFFER:
123 buffer = this->getElementArrayBuffer();
124 break;
125 default:
126 SkFAIL("Unexpected target to glBufferData");
127 break;
128 }
129
130 GrAlwaysAssert(buffer); 114 GrAlwaysAssert(buffer);
131 GrAlwaysAssert(buffer->getBound()); 115 GrAlwaysAssert(buffer->getBound());
132 116
133 buffer->allocate(size, reinterpret_cast<const GrGLchar *>(data)); 117 buffer->allocate(size, reinterpret_cast<const GrGLchar *>(data));
134 buffer->setUsage(usage); 118 buffer->setUsage(usage);
135 } 119 }
136 120
137 121
138 GrGLvoid pixelStorei(GrGLenum pname, GrGLint param) override { 122 GrGLvoid pixelStorei(GrGLenum pname, GrGLint param) override {
139 123
(...skipping 579 matching lines...) Expand 10 before | Expand all | Expand 10 after
719 } 703 }
720 } 704 }
721 705
722 GrGLvoid bindVertexArray(GrGLuint id) override { 706 GrGLvoid bindVertexArray(GrGLuint id) override {
723 GrVertexArrayObj* array = FIND(id, GrVertexArrayObj, kVertexArray_ObjTyp es); 707 GrVertexArrayObj* array = FIND(id, GrVertexArrayObj, kVertexArray_ObjTyp es);
724 GrAlwaysAssert((0 == id) || array); 708 GrAlwaysAssert((0 == id) || array);
725 this->setVertexArray(array); 709 this->setVertexArray(array);
726 } 710 }
727 711
728 GrGLvoid bindBuffer(GrGLenum target, GrGLuint bufferID) override { 712 GrGLvoid bindBuffer(GrGLenum target, GrGLuint bufferID) override {
729 GrAlwaysAssert(GR_GL_ARRAY_BUFFER == target || GR_GL_ELEMENT_ARRAY_BUFFE R == target);
730
731 GrBufferObj *buffer = FIND(bufferID, GrBufferObj, kBuffer_ObjTypes); 713 GrBufferObj *buffer = FIND(bufferID, GrBufferObj, kBuffer_ObjTypes);
732 // 0 is a permissible bufferID - it unbinds the current buffer 714 // 0 is a permissible bufferID - it unbinds the current buffer
733 715
734 switch (target) { 716 this->setBuffer(GetBufferIndex(target), buffer);
735 case GR_GL_ARRAY_BUFFER:
736 this->setArrayBuffer(buffer);
737 break;
738 case GR_GL_ELEMENT_ARRAY_BUFFER:
739 this->setElementArrayBuffer(buffer);
740 break;
741 default:
742 SkFAIL("Unexpected target to glBindBuffer");
743 break;
744 }
745 } 717 }
746 718
747 // deleting a bound buffer has the side effect of binding 0 719 // deleting a bound buffer has the side effect of binding 0
748 GrGLvoid deleteBuffers(GrGLsizei n, const GrGLuint* ids) override { 720 GrGLvoid deleteBuffers(GrGLsizei n, const GrGLuint* ids) override {
749 // first potentially unbind the buffers 721 // first potentially unbind the buffers
750 for (int i = 0; i < n; ++i) { 722 for (int buffIdx = 0; buffIdx < kNumBufferTargets; ++buffIdx) {
751 723 GrBufferObj* buffer = fBoundBuffers[buffIdx];
752 if (this->getArrayBuffer() && 724 if (!buffer) {
753 ids[i] == this->getArrayBuffer()->getID()) { 725 continue;
754 // this ID is the current array buffer
755 this->setArrayBuffer(nullptr);
756 } 726 }
757 if (this->getElementArrayBuffer() && 727 for (int i = 0; i < n; ++i) {
758 ids[i] == this->getElementArrayBuffer()->getID()) { 728 if (ids[i] == buffer->getID()) {
759 // this ID is the current element array buffer 729 this->setBuffer(buffIdx, nullptr);
760 this->setElementArrayBuffer(nullptr); 730 break;
731 }
761 } 732 }
762 } 733 }
763 734
764 // then actually "delete" the buffers 735 // then actually "delete" the buffers
765 for (int i = 0; i < n; ++i) { 736 for (int i = 0; i < n; ++i) {
766 GrBufferObj *buffer = FIND(ids[i], GrBufferObj, kBuffer_ObjTypes); 737 GrBufferObj *buffer = FIND(ids[i], GrBufferObj, kBuffer_ObjTypes);
767 GrAlwaysAssert(buffer); 738 GrAlwaysAssert(buffer);
768 739
769 GrAlwaysAssert(!buffer->getDeleted()); 740 GrAlwaysAssert(!buffer->getDeleted());
770 buffer->deleteAction(); 741 buffer->deleteAction();
771 } 742 }
772 } 743 }
773 744
774 // map a buffer to the caller's address space 745 // map a buffer to the caller's address space
775 GrGLvoid* mapBufferRange(GrGLenum target, GrGLintptr offset, GrGLsizeiptr le ngth, 746 GrGLvoid* mapBufferRange(GrGLenum target, GrGLintptr offset, GrGLsizeiptr le ngth,
776 GrGLbitfield access) override { 747 GrGLbitfield access) override {
777 GrAlwaysAssert(GR_GL_ARRAY_BUFFER == target ||
778 GR_GL_ELEMENT_ARRAY_BUFFER == target);
779
780 // We only expect read access and we expect that the buffer or range is always invalidated. 748 // We only expect read access and we expect that the buffer or range is always invalidated.
781 GrAlwaysAssert(!SkToBool(GR_GL_MAP_READ_BIT & access)); 749 GrAlwaysAssert(!SkToBool(GR_GL_MAP_READ_BIT & access));
782 GrAlwaysAssert((GR_GL_MAP_INVALIDATE_BUFFER_BIT | GR_GL_MAP_INVALIDATE_R ANGE_BIT) & access); 750 GrAlwaysAssert((GR_GL_MAP_INVALIDATE_BUFFER_BIT | GR_GL_MAP_INVALIDATE_R ANGE_BIT) & access);
783 751
784 GrBufferObj *buffer = nullptr; 752 GrBufferObj *buffer = fBoundBuffers[GetBufferIndex(target)];
785 switch (target) {
786 case GR_GL_ARRAY_BUFFER:
787 buffer = this->getArrayBuffer();
788 break;
789 case GR_GL_ELEMENT_ARRAY_BUFFER:
790 buffer = this->getElementArrayBuffer();
791 break;
792 default:
793 SkFAIL("Unexpected target to glMapBufferRange");
794 break;
795 }
796
797 if (buffer) { 753 if (buffer) {
798 GrAlwaysAssert(offset >= 0 && offset + length <= buffer->getSize()); 754 GrAlwaysAssert(offset >= 0 && offset + length <= buffer->getSize());
799 GrAlwaysAssert(!buffer->getMapped()); 755 GrAlwaysAssert(!buffer->getMapped());
800 buffer->setMapped(offset, length); 756 buffer->setMapped(offset, length);
801 return buffer->getDataPtr() + offset; 757 return buffer->getDataPtr() + offset;
802 } 758 }
803 759
804 GrAlwaysAssert(false); 760 GrAlwaysAssert(false);
805 return nullptr; // no buffer bound to the target 761 return nullptr; // no buffer bound to the target
806 } 762 }
807 763
808 GrGLvoid* mapBuffer(GrGLenum target, GrGLenum access) override { 764 GrGLvoid* mapBuffer(GrGLenum target, GrGLenum access) override {
809 GrAlwaysAssert(GR_GL_WRITE_ONLY == access); 765 GrAlwaysAssert(GR_GL_WRITE_ONLY == access);
810 766 GrBufferObj *buffer = fBoundBuffers[GetBufferIndex(target)];
811 GrBufferObj *buffer = nullptr;
812 switch (target) {
813 case GR_GL_ARRAY_BUFFER:
814 buffer = this->getArrayBuffer();
815 break;
816 case GR_GL_ELEMENT_ARRAY_BUFFER:
817 buffer = this->getElementArrayBuffer();
818 break;
819 default:
820 SkFAIL("Unexpected target to glMapBuffer");
821 break;
822 }
823
824 return this->mapBufferRange(target, 0, buffer->getSize(), 767 return this->mapBufferRange(target, 0, buffer->getSize(),
825 GR_GL_MAP_WRITE_BIT | GR_GL_MAP_INVALIDATE_B UFFER_BIT); 768 GR_GL_MAP_WRITE_BIT | GR_GL_MAP_INVALIDATE_B UFFER_BIT);
826 } 769 }
827 770
828 // remove a buffer from the caller's address space 771 // remove a buffer from the caller's address space
829 // TODO: check if the "access" method from "glMapBuffer" was honored 772 // TODO: check if the "access" method from "glMapBuffer" was honored
830 GrGLboolean unmapBuffer(GrGLenum target) override { 773 GrGLboolean unmapBuffer(GrGLenum target) override {
831 GrAlwaysAssert(GR_GL_ARRAY_BUFFER == target || 774 GrBufferObj *buffer = fBoundBuffers[GetBufferIndex(target)];
832 GR_GL_ELEMENT_ARRAY_BUFFER == target);
833
834 GrBufferObj *buffer = nullptr;
835 switch (target) {
836 case GR_GL_ARRAY_BUFFER:
837 buffer = this->getArrayBuffer();
838 break;
839 case GR_GL_ELEMENT_ARRAY_BUFFER:
840 buffer = this->getElementArrayBuffer();
841 break;
842 default:
843 SkFAIL("Unexpected target to glUnmapBuffer");
844 break;
845 }
846
847 if (buffer) { 775 if (buffer) {
848 GrAlwaysAssert(buffer->getMapped()); 776 GrAlwaysAssert(buffer->getMapped());
849 buffer->resetMapped(); 777 buffer->resetMapped();
850 return GR_GL_TRUE; 778 return GR_GL_TRUE;
851 } 779 }
852 780
853 GrAlwaysAssert(false); 781 GrAlwaysAssert(false);
854 return GR_GL_FALSE; // GR_GL_INVALID_OPERATION; 782 return GR_GL_FALSE; // GR_GL_INVALID_OPERATION;
855 } 783 }
856 784
857 GrGLvoid flushMappedBufferRange(GrGLenum target, GrGLintptr offset, 785 GrGLvoid flushMappedBufferRange(GrGLenum target, GrGLintptr offset,
858 GrGLsizeiptr length) override { 786 GrGLsizeiptr length) override {
859 GrAlwaysAssert(GR_GL_ARRAY_BUFFER == target || 787 GrBufferObj *buffer = fBoundBuffers[GetBufferIndex(target)];
860 GR_GL_ELEMENT_ARRAY_BUFFER == target);
861
862 GrBufferObj *buffer = nullptr;
863 switch (target) {
864 case GR_GL_ARRAY_BUFFER:
865 buffer = this->getArrayBuffer();
866 break;
867 case GR_GL_ELEMENT_ARRAY_BUFFER:
868 buffer = this->getElementArrayBuffer();
869 break;
870 default:
871 SkFAIL("Unexpected target to glUnmapBuffer");
872 break;
873 }
874
875 if (buffer) { 788 if (buffer) {
876 GrAlwaysAssert(buffer->getMapped()); 789 GrAlwaysAssert(buffer->getMapped());
877 GrAlwaysAssert(offset >= 0 && (offset + length) <= buffer->getMapped Length()); 790 GrAlwaysAssert(offset >= 0 && (offset + length) <= buffer->getMapped Length());
878 } else { 791 } else {
879 GrAlwaysAssert(false); 792 GrAlwaysAssert(false);
880 } 793 }
881 } 794 }
882 795
883 GrGLvoid getBufferParameteriv(GrGLenum target, GrGLenum value, GrGLint* para ms) override { 796 GrGLvoid getBufferParameteriv(GrGLenum target, GrGLenum value, GrGLint* para ms) override {
884 797
885 GrAlwaysAssert(GR_GL_ARRAY_BUFFER == target ||
886 GR_GL_ELEMENT_ARRAY_BUFFER == target);
887 GrAlwaysAssert(GR_GL_BUFFER_SIZE == value || 798 GrAlwaysAssert(GR_GL_BUFFER_SIZE == value ||
888 GR_GL_BUFFER_USAGE == value); 799 GR_GL_BUFFER_USAGE == value);
889 800
890 GrBufferObj *buffer = nullptr; 801 GrBufferObj *buffer = fBoundBuffers[GetBufferIndex(target)];
891 switch (target) {
892 case GR_GL_ARRAY_BUFFER:
893 buffer = this->getArrayBuffer();
894 break;
895 case GR_GL_ELEMENT_ARRAY_BUFFER:
896 buffer = this->getElementArrayBuffer();
897 break;
898 }
899
900 GrAlwaysAssert(buffer); 802 GrAlwaysAssert(buffer);
901 803
902 switch (value) { 804 switch (value) {
903 case GR_GL_BUFFER_MAPPED: 805 case GR_GL_BUFFER_MAPPED:
904 *params = GR_GL_FALSE; 806 *params = GR_GL_FALSE;
905 if (buffer) 807 if (buffer)
906 *params = buffer->getMapped() ? GR_GL_TRUE : GR_GL_FALSE; 808 *params = buffer->getMapped() ? GR_GL_TRUE : GR_GL_FALSE;
907 break; 809 break;
908 case GR_GL_BUFFER_SIZE: 810 case GR_GL_BUFFER_SIZE:
909 *params = 0; 811 *params = 0;
910 if (buffer) 812 if (buffer)
911 *params = SkToInt(buffer->getSize()); 813 *params = SkToInt(buffer->getSize());
912 break; 814 break;
913 case GR_GL_BUFFER_USAGE: 815 case GR_GL_BUFFER_USAGE:
914 *params = GR_GL_STATIC_DRAW; 816 *params = GR_GL_STATIC_DRAW;
915 if (buffer) 817 if (buffer)
916 *params = buffer->getUsage(); 818 *params = buffer->getUsage();
917 break; 819 break;
918 default: 820 default:
919 SkFAIL("Unexpected value to glGetBufferParamateriv"); 821 SkFAIL("Unexpected value to glGetBufferParamateriv");
920 break; 822 break;
921 } 823 }
922 } 824 }
923 825
924 private: 826 private:
827 inline int static GetBufferIndex(GrGLenum glTarget) {
828 switch (glTarget) {
829 default: SkFAIL("Unexpected GL target to G etBufferIndex");
830 case GR_GL_ARRAY_BUFFER: return 0;
831 case GR_GL_ELEMENT_ARRAY_BUFFER: return 1;
832 case GR_GL_TEXTURE_BUFFER: return 2;
833 case GR_GL_DRAW_INDIRECT_BUFFER: return 3;
834 }
835 }
836 constexpr int static kNumBufferTargets = 4;
837
925 // the OpenGLES 2.0 spec says this must be >= 128 838 // the OpenGLES 2.0 spec says this must be >= 128
926 static const GrGLint kDefaultMaxVertexUniformVectors = 128; 839 static const GrGLint kDefaultMaxVertexUniformVectors = 128;
927 840
928 // the OpenGLES 2.0 spec says this must be >=16 841 // the OpenGLES 2.0 spec says this must be >=16
929 static const GrGLint kDefaultMaxFragmentUniformVectors = 16; 842 static const GrGLint kDefaultMaxFragmentUniformVectors = 16;
930 843
931 // the OpenGLES 2.0 spec says this must be >= 8 844 // the OpenGLES 2.0 spec says this must be >= 8
932 static const GrGLint kDefaultMaxVertexAttribs = 8; 845 static const GrGLint kDefaultMaxVertexAttribs = 8;
933 846
934 // the OpenGLES 2.0 spec says this must be >= 8 847 // the OpenGLES 2.0 spec says this must be >= 8
935 static const GrGLint kDefaultMaxVaryingVectors = 8; 848 static const GrGLint kDefaultMaxVaryingVectors = 8;
936 849
937 // the OpenGLES 2.0 spec says this must be >= 2 850 // the OpenGLES 2.0 spec says this must be >= 2
938 static const GrGLint kDefaultMaxTextureUnits = 8; 851 static const GrGLint kDefaultMaxTextureUnits = 8;
939 852
940 static const char* kExtensions[]; 853 static const char* kExtensions[];
941 854
942 GrGLuint fCurrGenericID; 855 GrGLuint fCurrGenericID;
943 GrGLuint fCurrTextureUnit; 856 GrGLuint fCurrTextureUnit;
944 GrTextureUnitObj* fTextureUnits[kDefaultMaxTextureUnits]; 857 GrTextureUnitObj* fTextureUnits[kDefaultMaxTextureUnits];
945 GrBufferObj* fArrayBuffer; 858 GrBufferObj* fBoundBuffers[kNumBufferTargets];
946 GrBufferObj* fElementArrayBuffer;
947 GrVertexArrayObj* fVertexArray; 859 GrVertexArrayObj* fVertexArray;
948 GrGLint fPackRowLength; 860 GrGLint fPackRowLength;
949 GrGLint fUnpackRowLength; 861 GrGLint fUnpackRowLength;
950 GrGLint fPackAlignment; 862 GrGLint fPackAlignment;
951 GrFrameBufferObj* fFrameBuffer; 863 GrFrameBufferObj* fFrameBuffer;
952 GrRenderBufferObj* fRenderBuffer; 864 GrRenderBufferObj* fRenderBuffer;
953 GrProgramObj* fProgram; 865 GrProgramObj* fProgram;
954 mutable bool fAbandoned; 866 mutable bool fAbandoned;
955 // global store of all objects 867 // global store of all objects
956 SkTArray<GrFakeRefObj *> fObjects; 868 SkTArray<GrFakeRefObj *> fObjects;
(...skipping 108 matching lines...) Expand 10 before | Expand all | Expand 10 after
1065 } 977 }
1066 return nullptr; 978 return nullptr;
1067 } 979 }
1068 980
1069 GrTextureUnitObj* getTextureUnit(int unit) { 981 GrTextureUnitObj* getTextureUnit(int unit) {
1070 GrAlwaysAssert(0 <= unit && kDefaultMaxTextureUnits > unit); 982 GrAlwaysAssert(0 <= unit && kDefaultMaxTextureUnits > unit);
1071 983
1072 return fTextureUnits[unit]; 984 return fTextureUnits[unit];
1073 } 985 }
1074 986
1075 void setArrayBuffer(GrBufferObj *arrayBuffer) { 987 GrGLvoid setBuffer(int buffIdx, GrBufferObj* buffer) {
1076 if (fArrayBuffer) { 988 if (fBoundBuffers[buffIdx]) {
1077 // automatically break the binding of the old buffer 989 // automatically break the binding of the old buffer
1078 GrAlwaysAssert(fArrayBuffer->getBound()); 990 GrAlwaysAssert(fBoundBuffers[buffIdx]->getBound());
1079 fArrayBuffer->resetBound(); 991 fBoundBuffers[buffIdx]->resetBound();
1080 992
1081 GrAlwaysAssert(!fArrayBuffer->getDeleted()); 993 GrAlwaysAssert(!fBoundBuffers[buffIdx]->getDeleted());
1082 fArrayBuffer->unref(); 994 fBoundBuffers[buffIdx]->unref();
1083 } 995 }
1084 996
1085 fArrayBuffer = arrayBuffer; 997 if (buffer) {
998 GrAlwaysAssert(!buffer->getDeleted());
999 buffer->ref();
1086 1000
1087 if (fArrayBuffer) { 1001 GrAlwaysAssert(!buffer->getBound());
1088 GrAlwaysAssert(!fArrayBuffer->getDeleted()); 1002 buffer->setBound();
1089 fArrayBuffer->ref();
1090
1091 GrAlwaysAssert(!fArrayBuffer->getBound());
1092 fArrayBuffer->setBound();
1093 }
1094 }
1095
1096 GrBufferObj* getArrayBuffer() { return fArrayBuffer; }
1097 void setElementArrayBuffer(GrBufferObj *elementArrayBuffer) {
1098 if (fElementArrayBuffer) {
1099 // automatically break the binding of the old buffer
1100 GrAlwaysAssert(fElementArrayBuffer->getBound());
1101 fElementArrayBuffer->resetBound();
1102
1103 GrAlwaysAssert(!fElementArrayBuffer->getDeleted());
1104 fElementArrayBuffer->unref();
1105 } 1003 }
1106 1004
1107 fElementArrayBuffer = elementArrayBuffer; 1005 fBoundBuffers[buffIdx] = buffer;
1108
1109 if (fElementArrayBuffer) {
1110 GrAlwaysAssert(!fElementArrayBuffer->getDeleted());
1111 fElementArrayBuffer->ref();
1112
1113 GrAlwaysAssert(!fElementArrayBuffer->getBound());
1114 fElementArrayBuffer->setBound();
1115 }
1116 } 1006 }
1117 1007
1118 GrBufferObj *getElementArrayBuffer() { return fElementArrayBuffer; }
1119
1120 void setVertexArray(GrVertexArrayObj* vertexArray) { 1008 void setVertexArray(GrVertexArrayObj* vertexArray) {
1121 if (vertexArray) { 1009 if (vertexArray) {
1122 SkASSERT(!vertexArray->getDeleted()); 1010 SkASSERT(!vertexArray->getDeleted());
1123 } 1011 }
1124 SkRefCnt_SafeAssign(fVertexArray, vertexArray); 1012 SkRefCnt_SafeAssign(fVertexArray, vertexArray);
1125 } 1013 }
1126 1014
1127 GrVertexArrayObj* getVertexArray() { return fVertexArray; } 1015 GrVertexArrayObj* getVertexArray() { return fVertexArray; }
1128 1016
1129 void setTexture(GrTextureObj *texture) { 1017 void setTexture(GrTextureObj *texture) {
(...skipping 117 matching lines...) Expand 10 before | Expand all | Expand 10 after
1247 namespace sk_gpu_test { 1135 namespace sk_gpu_test {
1248 GLTestContext* CreateDebugGLTestContext() { 1136 GLTestContext* CreateDebugGLTestContext() {
1249 GLTestContext* ctx = new DebugGLContext(); 1137 GLTestContext* ctx = new DebugGLContext();
1250 if (ctx->isValid()) { 1138 if (ctx->isValid()) {
1251 return ctx; 1139 return ctx;
1252 } 1140 }
1253 delete ctx; 1141 delete ctx;
1254 return nullptr; 1142 return nullptr;
1255 } 1143 }
1256 } 1144 }
OLDNEW
« no previous file with comments | « src/gpu/gl/GrGLCreateNullInterface.cpp ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698