Skip to content

Commit d5f4498

Browse files
Refactor getParameter binding logic to use webgl_context layer
- Add new enums for buffer/object binding parameters in webgl_context.hpp - Add getParameter methods in WebGLContext for buffer/program/framebuffer/renderbuffer bindings - Add getParameterV2 methods in WebGL2Context for WebGL2-specific bindings - Update webgl_rendering_context.cpp to use handle()->getParameter() pattern Co-authored-by: EndlessJour9527 <155411404+EndlessJour9527@users.noreply.github.com>
1 parent bc47659 commit d5f4498

19 files changed

+157
-69
lines changed

src/client/graphics/webgl_context.cpp

Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1466,6 +1466,40 @@ namespace endor
14661466
return v;
14671467
}
14681468

1469+
shared_ptr<WebGLBuffer> WebGLContext::getParameter(WebGLBufferBindingParameterName pname)
1470+
{
1471+
switch (pname)
1472+
{
1473+
case WebGLBufferBindingParameterName::kArrayBufferBinding:
1474+
return clientState_.vertexBuffer.value_or(nullptr);
1475+
case WebGLBufferBindingParameterName::kElementArrayBufferBinding:
1476+
return clientState_.elementBuffer.value_or(nullptr);
1477+
default:
1478+
return nullptr;
1479+
}
1480+
}
1481+
1482+
shared_ptr<WebGLProgram> WebGLContext::getParameterProgram(WebGLObjectBindingParameterName pname)
1483+
{
1484+
if (pname == WebGLObjectBindingParameterName::kCurrentProgram)
1485+
return clientState_.program.value_or(nullptr);
1486+
return nullptr;
1487+
}
1488+
1489+
shared_ptr<WebGLFramebuffer> WebGLContext::getParameterFramebuffer(WebGLObjectBindingParameterName pname)
1490+
{
1491+
if (pname == WebGLObjectBindingParameterName::kFramebufferBinding)
1492+
return clientState_.framebuffer.value_or(nullptr);
1493+
return nullptr;
1494+
}
1495+
1496+
shared_ptr<WebGLRenderbuffer> WebGLContext::getParameterRenderbuffer(WebGLObjectBindingParameterName pname)
1497+
{
1498+
if (pname == WebGLObjectBindingParameterName::kRenderbufferBinding)
1499+
return clientState_.renderbuffer.value_or(nullptr);
1500+
return nullptr;
1501+
}
1502+
14691503
WebGLShaderPrecisionFormat WebGLContext::getShaderPrecisionFormat(int shadertype, int precisiontype)
14701504
{
14711505
if (shadertype != WEBGL_VERTEX_SHADER && shadertype != WEBGL_FRAGMENT_SHADER)
@@ -2038,6 +2072,42 @@ namespace endor
20382072
return v;
20392073
}
20402074

2075+
shared_ptr<WebGLBuffer> WebGL2Context::getParameterV2(WebGL2BufferBindingParameterName pname)
2076+
{
2077+
// These buffer bindings are not yet tracked in clientState
2078+
// TODO: Extend WebGLState to track additional buffer binding points
2079+
switch (pname)
2080+
{
2081+
case WebGL2BufferBindingParameterName::kCopyReadBufferBinding:
2082+
case WebGL2BufferBindingParameterName::kCopyWriteBufferBinding:
2083+
case WebGL2BufferBindingParameterName::kPixelPackBufferBinding:
2084+
case WebGL2BufferBindingParameterName::kPixelUnpackBufferBinding:
2085+
case WebGL2BufferBindingParameterName::kTransformFeedbackBufferBinding:
2086+
case WebGL2BufferBindingParameterName::kUniformBufferBinding:
2087+
default:
2088+
return nullptr;
2089+
}
2090+
}
2091+
2092+
shared_ptr<WebGLFramebuffer> WebGL2Context::getParameterFramebufferV2(WebGL2ObjectBindingParameterName pname)
2093+
{
2094+
switch (pname)
2095+
{
2096+
case WebGL2ObjectBindingParameterName::kDrawFramebufferBinding:
2097+
case WebGL2ObjectBindingParameterName::kReadFramebufferBinding:
2098+
return clientState_.framebuffer.value_or(nullptr);
2099+
default:
2100+
return nullptr;
2101+
}
2102+
}
2103+
2104+
shared_ptr<WebGLVertexArray> WebGL2Context::getParameterVertexArrayV2(WebGL2ObjectBindingParameterName pname)
2105+
{
2106+
if (pname == WebGL2ObjectBindingParameterName::kVertexArrayBinding)
2107+
return clientState_.vertexArray.value_or(nullptr);
2108+
return nullptr;
2109+
}
2110+
20412111
shared_ptr<WebGLQuery> WebGL2Context::getQuery(WebGLQueryTarget target, int pname)
20422112
{
20432113
NOT_IMPLEMENTED();

src/client/graphics/webgl_context.hpp

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -219,6 +219,41 @@ namespace endor
219219
kExtMaxViewsOvr = WEBGL2_EXT_MAX_VIEWS_OVR,
220220
};
221221

222+
/**
223+
* Enum for buffer/object binding parameters that return WebGL objects.
224+
*/
225+
enum class WebGLBufferBindingParameterName
226+
{
227+
kArrayBufferBinding = WEBGL_ARRAY_BUFFER_BINDING,
228+
kElementArrayBufferBinding = WEBGL_ELEMENT_ARRAY_BUFFER_BINDING,
229+
};
230+
231+
enum class WebGLObjectBindingParameterName
232+
{
233+
kCurrentProgram = WEBGL_CURRENT_PROGRAM,
234+
kFramebufferBinding = WEBGL_FRAMEBUFFER_BINDING,
235+
kRenderbufferBinding = WEBGL_RENDERBUFFER_BINDING,
236+
};
237+
238+
enum class WebGL2BufferBindingParameterName
239+
{
240+
kCopyReadBufferBinding = WEBGL2_COPY_READ_BUFFER_BINDING,
241+
kCopyWriteBufferBinding = WEBGL2_COPY_WRITE_BUFFER_BINDING,
242+
kPixelPackBufferBinding = WEBGL2_PIXEL_PACK_BUFFER_BINDING,
243+
kPixelUnpackBufferBinding = WEBGL2_PIXEL_UNPACK_BUFFER_BINDING,
244+
kTransformFeedbackBufferBinding = WEBGL2_TRANSFORM_FEEDBACK_BUFFER_BINDING,
245+
kUniformBufferBinding = WEBGL2_UNIFORM_BUFFER_BINDING,
246+
};
247+
248+
enum class WebGL2ObjectBindingParameterName
249+
{
250+
kDrawFramebufferBinding = WEBGL2_DRAW_FRAMEBUFFER_BINDING,
251+
kReadFramebufferBinding = WEBGL2_READ_FRAMEBUFFER_BINDING,
252+
kVertexArrayBinding = WEBGL2_VERTEX_ARRAY_BINDING,
253+
kSamplerBinding = WEBGL2_SAMPLER_BINDING,
254+
kTransformFeedbackBinding = WEBGL2_TRANSFORM_FEEDBACK_BINDING,
255+
};
256+
222257
class ContextAttributes final
223258
{
224259
public:
@@ -464,6 +499,10 @@ namespace endor
464499
bool getParameter(WebGLBooleanIndexedParameterName pname, int index);
465500
float getParameter(WebGLFloatArrayParameterName pname, int index);
466501
std::string getParameter(WebGLStringParameterName pname);
502+
std::shared_ptr<WebGLBuffer> getParameter(WebGLBufferBindingParameterName pname);
503+
std::shared_ptr<WebGLProgram> getParameterProgram(WebGLObjectBindingParameterName pname);
504+
std::shared_ptr<WebGLFramebuffer> getParameterFramebuffer(WebGLObjectBindingParameterName pname);
505+
std::shared_ptr<WebGLRenderbuffer> getParameterRenderbuffer(WebGLObjectBindingParameterName pname);
467506
WebGLShaderPrecisionFormat getShaderPrecisionFormat(int shadertype, int precisiontype);
468507
int getError();
469508
std::vector<std::string> &getSupportedExtensions();
@@ -918,6 +957,9 @@ namespace endor
918957
std::optional<int> length = std::nullopt);
919958
int getFragDataLocation(std::shared_ptr<WebGLProgram> program, const std::string &name);
920959
int getParameterV2(WebGL2IntegerParameterName pname);
960+
std::shared_ptr<WebGLBuffer> getParameterV2(WebGL2BufferBindingParameterName pname);
961+
std::shared_ptr<WebGLFramebuffer> getParameterFramebufferV2(WebGL2ObjectBindingParameterName pname);
962+
std::shared_ptr<WebGLVertexArray> getParameterVertexArrayV2(WebGL2ObjectBindingParameterName pname);
921963
std::shared_ptr<WebGLQuery> getQuery(WebGLQueryTarget target, int pname);
922964
int getUniformBlockIndex(std::shared_ptr<WebGLProgram> program, const std::string &uniformBlockName);
923965

src/client/script_bindings/webgl/active_info.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,5 +60,5 @@ namespace endor
6060
}
6161

6262
} // namespace webgl
63-
} // namespace script_bindings
63+
} // namespace script_bindings
6464
} // namespace endor

src/client/script_bindings/webgl/active_info.hpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,5 +38,5 @@ namespace endor
3838
};
3939

4040
} // namespace webgl
41-
} // namespace script_bindings
41+
} // namespace script_bindings
4242
} // namespace endor

src/client/script_bindings/webgl/framebuffer.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,5 +31,5 @@ namespace endor
3131
{
3232
}
3333
} // namespace webgl
34-
} // namespace script_bindings
34+
} // namespace script_bindings
3535
} // namespace endor

src/client/script_bindings/webgl/framebuffer.hpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,5 +37,5 @@ namespace endor
3737
};
3838

3939
} // namespace webgl
40-
} // namespace script_bindings
40+
} // namespace script_bindings
4141
} // namespace endor

src/client/script_bindings/webgl/object.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,5 +28,5 @@ namespace endor
2828
// WebGLObject is a base class, typically not instantiated directly
2929
}
3030
} // namespace webgl
31-
} // namespace script_bindings
31+
} // namespace script_bindings
3232
} // namespace endor

src/client/script_bindings/webgl/object.hpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,5 +45,5 @@ namespace endor
4545
};
4646

4747
} // namespace webgl
48-
} // namespace script_bindings
48+
} // namespace script_bindings
4949
} // namespace endor

src/client/script_bindings/webgl/program.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,5 +20,5 @@ namespace endor
2020
}
2121

2222
} // namespace webgl
23-
} // namespace script_bindings
23+
} // namespace script_bindings
2424
} // namespace endor

src/client/script_bindings/webgl/program.hpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,5 +32,5 @@ namespace endor
3232
WebGLProgram(v8::Isolate *isolate, const v8::FunctionCallbackInfo<v8::Value> &args);
3333
};
3434
} // namespace webgl
35-
} // namespace script_bindings
35+
} // namespace script_bindings
3636
} // namespace endor

0 commit comments

Comments
 (0)