PDA

View Full Version : How convert c++ code?



SesillaAndromeda
11-12-2010, 02:10 PM
Hi all,

i have a problem, it's possible to convert this c++ code into delphi. Any chance or workaround?



list<Vector2> vList;
const Vector2 vMin = 1.2f;
const Vector2 vMax = 8.9f;

list.clear();
for (float y = vMin.y; y<=vMax.y; y+=1.0f)
{
for (float x = vMin.x; x<=vMax.x; x+=1.0f)
{
outList.push_back(Vector2(x, y));
}
}
Thanks in advance
Sesilla

chronozphere
11-12-2010, 06:49 PM
Maybe like this?



var
x, y: Single;
const
vMin = 1.2;
vMax = 8.9;
begin
x := vMin;
y := vMin;
while (x <= vMax) do
begin
while (y <= vMax) do
begin
//Something here...
y := y + 1;
end;
x := x + 1;
end;

end;

Brainer
11-12-2010, 07:30 PM
Try this:


uses
Generics.Collections;

var
outList: TList<Vector2>;
vMin, vMax: Vector2;
x, y: Single;
begin
outList.Clear();

y := vMin.y;
x := vMin.x;
while (y <= vMax.y) do
begin
while (x <= vMax.x) do
begin
outList.Add(Vector2(x, y));
x := x + 1;
end;
y := y + 1.0;
end;
end;

Works in D2009 and up.

virtual
11-12-2010, 09:53 PM
;D me too i'd like to convert this code ,seems difficult to do so, especially the procedure SetShaders()




typedef void (*GenFP)(void); // any function ptr type would do
static GenFP glFP[7];
const static char* glnames[]={
"glCreateShader", "glCreateProgram", "glShaderSource", "glCompileShader",
"glAttachShader", "glLinkProgram", "glUseProgram"
};

static void setShaders() {
int i;
// 19. April 2007: "(GenFP) cast" added by benny!weltenkonstrukteur.de
for (i=0; i<7; i++) glFP[i] = (GenFP)wglGetProcAddress(glnames[i]);
GLuint v = ((PFNGLCREATESHADERPROC)(glFP[0]))(GL_VERTEX_SHADER);
GLuint f = ((PFNGLCREATESHADERPROC)(glFP[0]))(GL_FRAGMENT_SHADER);
GLuint p = ((PFNGLCREATEPROGRAMPROC)glFP[1])();
((PFNGLSHADERSOURCEPROC)glFP[2]) (v, 1, &vsh, NULL);
((PFNGLCOMPILESHADERPROC)glFP[3])(v);
((PFNGLSHADERSOURCEPROC)glFP[2]) (f, 1, &fsh, NULL);
((PFNGLCOMPILESHADERPROC)glFP[3])(f);
((PFNGLATTACHSHADERPROC)glFP[4])(p,v);
((PFNGLATTACHSHADERPROC)glFP[4])(p,f);
((PFNGLLINKPROGRAMPROC)glFP[5])(p);
((PFNGLUSEPROGRAMPROC) glFP[6])(p);
}



vsh : just an array of char ( contain the vertex shader )
fsh : .................................................f ragment shader)

JSoftware
12-12-2010, 01:10 AM
Ah someone is trying to create 4k's.. :)

Something like this should work:


const
glNames: array[0..6] of pchar = ('glCreateShader', 'glCreateProgram', 'glShaderSource', 'glCompileShader', 'glAttachShader', 'glLinkProgram', 'glUseProgram');

var
glFP: array[0..6] of pointer;

type
TGLCreateShader = function(Typ: GLenum): GLUint; cdecl;
TGLCreateProgram = function: GLUint; cdecl;
TGLShaderSource = function(Shader: GLUint; Count: GLInt; PointerToPchar: Pointer; Len: GLUint): GLUint;
TGLCompileShader = function(Shader: GLUint): GLUint;
TGLAttachShader = function(Prog, Shader: GLUint): GLUint;
TGLLinkProgram = function(Prog: GLUint): GLUint;
TGLUseProgram = function(Prog: GLUint): GLUint;

procedure setShader;
var v,f,p: GLUint;
begin
for i := 0 to 6 do
glFP[i] := wglGetProcAddress(glNames[i]);

v := TGLCreateShader(glFP[0])(GL_VERTEX_SHADER);
f := TGLCreateShader(glFP[0])(GL_FRAGMENT_SHADER);
p := TGLCreateProgram(glFP[1])();
TGLShaderSource(glFP[2])(v,1,@vsh,nil);
TGLCompileShader(glFP[3])(v);
TGLShaderSource(glFP[2])(f,1,@fsh,nil);
TGLCompileShader(glFP[3])(f);
TGLAttachShader(glFP[4])(p,v);
TGLAttachShader(glFP[4])(p,f);
TGLLinkProgram(glFP[5])(p);
TGLUseProgram(glFP[6])(p);
end;

virtual
12-12-2010, 08:48 AM
JSoftware : thank you
in fact this is a c++ 1k OGL+shader , with delphi this would be 1~2 kb