Skip to content

Instantly share code, notes, and snippets.

Created March 1, 2011 09:10
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save anonymous/848872 to your computer and use it in GitHub Desktop.
Save anonymous/848872 to your computer and use it in GitHub Desktop.
Molehill の最小コード
package
{
import flash.geom.Matrix3D;
import flash.display3D.IndexBuffer3D;
import net.hires.utils.Stats;
import com.adobe.utils.AGALMiniAssembler;
import flash.display.Sprite;
import flash.display.Stage3D;
import flash.display.StageAlign;
import flash.display.StageScaleMode;
import flash.display3D.Context3D;
import flash.display3D.Context3DProgramType;
import flash.display3D.Context3DRenderMode;
import flash.display3D.Context3DVertexBufferFormat;
import flash.display3D.Program3D;
import flash.display3D.VertexBuffer3D;
import flash.events.Event;
import flash.geom.Rectangle;
/**
* @author Mk-10:cellfusion (www.cellfusion.jp)
*/
public class Main2 extends Sprite
{
private static const W:Number = 800;
private static const H:Number = 600;
private var _context3D:Context3D;
private var _shaderProgram:Program3D;
private var _vertexBuffer:VertexBuffer3D;
private var _indexBuffer:IndexBuffer3D;
public function Main2()
{
stage.align = StageAlign.TOP_LEFT;
stage.scaleMode = StageScaleMode.NO_SCALE;
stage.stage3Ds[0].viewPort = new Rectangle(0, 0, W, H);
stage.stage3Ds[0].addEventListener(Event.CONTEXT3D_CREATE, context3DCreateHandler);
stage.stage3Ds[0].requestContext3D(Context3DRenderMode.AUTO);
addChild(new Stats());
}
private function context3DCreateHandler(event:Event):void
{
var t:Stage3D = event.target as Stage3D;
_context3D = t.context3D;
if (_context3D == null) {
trace("context3d not create.");
return;
}
trace(_context3D.driverInfo);
try{
_context3D.configureBackBuffer(W, H, 1, true);
}catch(error:Error){
trace(error);
}
_context3D.enableErrorChecking = true;
// compile vertex shader
var vertexShader:Array = [
"m44 op, va0, vc0",
"mov v0, va1" //copy texcoord from 1 to fragment program
];
var vertexAssembler:AGALMiniAssembler = new AGALMiniAssembler();
vertexAssembler.assemble(Context3DProgramType.VERTEX, vertexShader.join("\n"));
// compile fragment shader
var fragmentShader:Array = [
"mov oc, v0\n"
];
var fragmentAssembler:AGALMiniAssembler = new AGALMiniAssembler();
fragmentAssembler.assemble(Context3DProgramType.FRAGMENT, fragmentShader.join("\n"));
_shaderProgram = _context3D.createProgram();
_shaderProgram.upload(vertexAssembler.agalcode, fragmentAssembler.agalcode);
_vertexBuffer = _context3D.createVertexBuffer(3, 6); // x, y, z, r, g, b
_vertexBuffer.uploadFromVector(Vector.<Number>([
-1,-1,0, 255/255,0,0,
0,1,0, 193/255,216/255,47/255,
1,-1,0, 0,164/255,228/255
]), 0, 3);
_context3D.setVertexBufferAt(0, _vertexBuffer, 0, Context3DVertexBufferFormat.FLOAT_3); //xyz
_context3D.setVertexBufferAt(1, _vertexBuffer, 3, Context3DVertexBufferFormat.FLOAT_3); //rgb
_indexBuffer = _context3D.createIndexBuffer(3);
_indexBuffer.uploadFromVector(Vector.<uint>([0, 1, 2]), 0, 3);
_context3D.clear(0, 0, 0, 1);
_context3D.setProgram(_shaderProgram);
var modelMatrix:Matrix3D = new Matrix3D();
_context3D.setProgramConstantsFromMatrix(Context3DProgramType.VERTEX, 0, modelMatrix, true);
_context3D.drawTriangles(_indexBuffer);
_context3D.present();
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment