да не, я любую картинку скармливаю, и получаю перевернутую. причем старлинг то же самое хавает норм.
Код AS3:
package {
import com.adobe.utils.AGALMiniAssembler;
import com.adobe.utils.PerspectiveMatrix3D;
import flash.display.Bitmap;
import flash.display.Sprite;
import flash.display3D.Context3D;
import flash.display3D.Context3DBlendFactor;
import flash.display3D.Context3DProgramType;
import flash.display3D.Context3DTextureFormat;
import flash.display3D.Context3DVertexBufferFormat;
import flash.display3D.IndexBuffer3D;
import flash.display3D.Program3D;
import flash.display3D.textures.Texture;
import flash.display3D.VertexBuffer3D;
import flash.events.Event;
import flash.geom.Matrix3D;
import flash.geom.Vector3D;
import flash.utils.ByteArray;
import flash.utils.setTimeout;
import meshes.IndexTemplate;
import meshes.Poligon;
/**
* ...
* @author vaukalak
*/
public class Main extends Sprite {
private var _context:Context3D;
private var _poligon:Poligon;
private const _poligons:Vector.<Poligon> = new Vector.<Poligon>();
private var position:Vector3D;
private var indexBuffer:IndexBuffer3D;
[Embed(source = "../lib/live_start.png")]
public var textureAsset:Class;
public function Main():void {
stage.stage3Ds[0].addEventListener(Event.CONTEXT3D_CREATE, _onInit);
stage.stage3Ds[0].requestContext3D();
}
private function _onInit(e:Event):void {
_context = stage.stage3Ds[0].context3D;
_context.configureBackBuffer(stage.stageWidth, stage.stageHeight, 0);
_context.setBlendFactors(Context3DBlendFactor.SOURCE_ALPHA, Context3DBlendFactor.ONE_MINUS_SOURCE_ALPHA);
var texture:Texture = _context.createTexture(128, 128, Context3DTextureFormat.BGRA, false);
var bitmap:Bitmap = new textureAsset() as Bitmap;
texture.uploadFromBitmapData(bitmap.bitmapData, 0);
_context.setTextureAt(0, texture);
var program:Program3D = _context.createProgram();
var assembler:AGALMiniAssembler = new AGALMiniAssembler();
var code:String = "";
code += "mov op, va0\n";
code += "mov v1, va0\n";
var vertexShader:ByteArray = assembler.assemble(Context3DProgramType.VERTEX, code);
code = "";
code += "tex ft0, v1, fs0 <2d,clamp,linear>\n";
code += "mov oc, ft0";
var fragmentShader:ByteArray = assembler.assemble(Context3DProgramType.FRAGMENT, code);
program.upload(vertexShader, fragmentShader);
var vertixes:Vector.<Number> = new <Number>[
-1, -1,
1, -1,
1, 1,
-1, 1,
];
var vertexBuffer:VertexBuffer3D = _context.createVertexBuffer(4, 2);
vertexBuffer.uploadFromVector(vertixes, 0, vertixes.length / 2);
_context.setVertexBufferAt(0, vertexBuffer, 0, Context3DVertexBufferFormat.FLOAT_2);
var indexes:Vector.<uint> = new <uint>[0,1,2,2,3,1];
indexBuffer = _context.createIndexBuffer(indexes.length);
indexBuffer.uploadFromVector(indexes, 0, indexes.length);
_context.setProgram(program);
addEventListener(Event.ENTER_FRAME, _onEnterFrame);
}
private function _onEnterFrame(e:Event):void {
_context.clear(1, 1, 1, 1);
_context.drawTriangles(indexBuffer);
_context.present();
}
}