Quote: "Has Marc actually asked how many existing Blitzers a) Own a mac, b) Have the money to buy one, or c) Would consider buying one?."
nope.. there is a secondary reason for it though. it's to prevent alot of the "general" people from giving language feedback.
he wants to make sure all of the core language bugs are squished prior to general release.
Macintosh version really is only 2-3% of the entire Blitz market, and most people who have Macintosh, have them because they're useful not because they're just something to play games on.
So while it remains Mac only the team generally get better feedback from a public release.
Quote: "It's a little irritating how people go on about it being cross platform - yet it's really only cross platform because Marc wanted to develop on the mac, it's not like it's a major business decision to suddenly support macs."
BlitzMax is still in heavy development. It was always planned to be Multi-Platform, in this sense he can get rid of all the kinks without a market of whiners barraging his inbox with "why doesn't the 3d engine do such'n'such"..
Look at TGC, while sure they're making top dollar. Fact is the language isn't worth it, and they know it. Hense why they're constantly trying to make the new products everyones focus.
Quote: "I just don't swallow the whole intermediate assembly bit, your making out that all is required are a few register changes, which is complete twaddle - I've never developed on the mac, but I know it's not a simple case of swapping registers!."
Underneath... no, it isn't a case of simply altering what register goes where and what operation is performs when. But that is the point in the Intermediate Assembly.
If you want to think of it in terms of say DirectX and OpenGL through an intermediate api; when the user does something like create a new object.
Integer myObject = Make.Object( Object.XYZ || Object.Diffuse )
myObject.Lock
this.Add( 0.0, 0.5, 0.0, Color.Blue.ToArgb() )
this.Add(-0.5,-0.5, 0.0, Color.Aqua.ToArgb() )
this.Add( 0.5,-0.5, 0.0, Color.Green.ToArgb() )
myObject.Unlock
Render()
Console.Read()
That would produce a simple triangle,
DirectX:
VertexBuffer buffer = new VertexBuffer(typeof(CustomVertex.TransformedColored), 3, dev, 0, CustomVertex.TransformedColored.Format,
GraphicsStream stream = buffer.Lock(0, 0, 0);
CustomVertex.TransformedColored[] vertex = new CustomVertex.TransformedColored[3];
vertex[0].X = 0.0f; vertex[0].Y = 0.5f; vertex[0].Z= 0.0f; vertex[0].Color = System.Drawing.Color.Blue.ToArgb();
vertex[1].X =-0.5f; vertex[1].Y =-0.5f; vertex[1].Z= 0.0f; vertex[1].Color = System.Drawing.Color.Aqua.ToArgb();
vertex[2].X = 0.5f; vertex[2].Y =-0.5f; vertex[2].Z= 0.0f; vertex[2].Color = System.Drawing.Color.Green.ToArgb();
stream.Write(vertex);
buffer.Unlock();
// render
device.Clear(ClearFlags.Target, System.Drawing.Color.Blue, 1.0f, 0);
device.BeginScene();
device.SetStreamSource( 0, vertexBuffer, 0);
device.VertexFormat = CustomVertex.TransformedColored.Format;
device.DrawPrimitives(PrimitiveType.TriangleList, 0, 1);
device.EndScene();
device.Present();
OpenGL:
void Render()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glLoadIdentity();
glBegin(GL_TRIANGLES);
glColor3f( 0.0f, 0.0f, 1.0f );
glVertex3f( 0.0f, 0.5f, 0.0f);
glColor3f( 0.9f, 0.8f, 1.0f );
glVertex3f(-0.5f,-0.5f, 0.0f);
glColor3f( 0.0f, 1.0f, 0.0f );
glVertex3f( 0.5f,-0.5f, 0.0f);
glEnd();
}
Both codes produce the exact same result, because of how the compiler would work, the intermediate language means depending on what system you choose to compile for determins the end result code. Exact same stuff though.