Created
March 1, 2011 09:10
-
-
Save anonymous/848872 to your computer and use it in GitHub Desktop.
Molehill の最小コード
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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