OpenGL 작업에 Derelict를 사용하고 있으며 glVertexAttribPointer와 같은 funclions에 대해 항상 cast(GLvoid*) Vec3.sizeof
이 필요합니다.모든 유형의 사용자 정의 속성 추가 D
test.d(25): Error: no property 'glsizeof' for type 'Vec3'
test.d(26): Error: no property 'glsizeof' for type 'int'
유형에 속성을 추가 할 수있는 방법이 있나요 : 그래서
import std.stdio;
alias void GLvoid;
struct Vec3 {
float x, y, z;
}
GLvoid* glsizeof(T)(T t) {
return cast(GLvoid*) t.sizeof;
}
void main() {
Vec3 vec = { x: 2.5, y: 4.8, z: 3.2 };
writeln(cast(GLvoid*) vec.sizeof); // prints 'C'
writeln(cast(GLvoid*) Vec3.sizeof); // prints 'C'
writeln(cast(GLvoid*) int.sizeof); // prints '4'
// Now to try using glsizeof :)
GLvoid* size_vec = vec.glsizeof; // call glsizeof using a uniform function call
GLvoid* size_vec3 = Vec3.glsizeof;
GLvoid* size_int = int.glsizeof;
writeln(size_vec); // should print 'C'
writeln(size_vec3); // should print 'C'
writeln(size_int); // should print '4'
}
glsizeof
나는이 오류가 나는 기능을 할 줄 알았는데? 또는 별칭을 사용하여 다른 방법으로이 작업을 수행 할 수 있습니까? 아니면 내가 불가능한 일을하려고하는거야?
여기에 DPaste의 the code이 있습니다.
편집 : 내 예상 출력에 대한 자세한 내용을 추가했습니다.
건배! 나는 유스 케이스를 업데이트했다. (GLsize *가 아닌 GLsizei를 넣어야한다.)하지만 그 대답은 변함이 없다. 대안을 포함시켜 주셔서 감사합니다. :) – bjz
오케이. 내 대답을 업데이 트했지만, 사실 포인터가 작동한다는 사실에 조금 놀랐습니다.'void * '는 말할 것도 없습니다. 그리고 포인터에 크기를 캐스팅하는 것은 나에게 너무 드물게 보이지만 사용중인 API에 대해서는 아무 것도 모른다. –
OpenGL이 C API가되면 이상한 함수 매개 변수가 많이 생겨서 Derelict 바인딩으로 전파됩니다. 그래서 대부분의 코드에서 추상화하려고합니다. – bjz