添加RenderText.java
/**
*
* @author yangshuohao
*/
public class RenderContext extends Bitmap
{
private final int m_scanBuffer[];
public RenderContext(int width,int height)
{
super(width,height);
m_scanBuffer=new int[height*2];
}
public void DrawScanBuffer(int yCoord,int xMin,int xMax)
{
m_scanBuffer[yCoord*2]=xMin;
m_scanBuffer[yCoord*2+1]=xMax;
}
public void FillShape(int yMin,int yMax)
{
for(int j=yMin;j<yMax;j++)
{
int xMin=m_scanBuffer[j*2];
int xMax=m_scanBuffer[j*2+1];
for(int i=xMin;i<xMax;i++)
{
DrawPixel(i, j, (byte)0xFF, (byte)0xFF, (byte)0xFF, (byte)0xFF);
}
}
}
}
修改Display.java
import java.awt.Canvas;
import java.awt.Graphics;
import java.awt.Dimension;
import java.awt.image.BufferedImage;
import java.awt.image.BufferStrategy;
import java.awt.image.DataBufferByte;
import javax.swing.JFrame;
/**
*
* @author yangshuohao
*/
public class Display extends Canvas
{
private final JFrame m_frame;
private final RenderContext m_frameBuffer;
private final BufferedImage m_displayImage;
private final byte[] m_displayComponents;
private final BufferStrategy m_bufferStrategy;
private final Graphics m_grGraphics;
public RenderContext GetFrameBuffer() { return m_frameBuffer; }
public Display(int width,int height,String title)
{
Dimension size=new Dimension(width,height);
setPreferredSize(size);
setMinimumSize(size);
setMaximumSize(size);
m_frameBuffer=new RenderContext(width,height);
m_displayImage=new BufferedImage(width,height,BufferedImage.TYPE_3BYTE_BGR);
m_displayComponents=((DataBufferByte)m_displayImage.getRaster().getDataBuffer()).getData();
m_frameBuffer.Clear((byte)0x80);
for(int i=0;i<100;i++)
{
m_frameBuffer.DrawPixel(100+i, 100+i, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0xff);
}
m_frame=new JFrame();
m_frame.add(this);
m_frame.pack();
m_frame.setResizable(false);
m_frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
m_frame.setLocationRelativeTo(null);
m_frame.setTitle(title);
m_frame.setVisible(true);
createBufferStrategy(1);
m_bufferStrategy=getBufferStrategy();
m_grGraphics=m_bufferStrategy.getDrawGraphics();
}
public void SwapBuffers()
{
m_frameBuffer.CopyToByteArray(m_displayComponents);
m_grGraphics.drawImage(m_displayImage, 0, 0, m_frameBuffer.GetWidth()
,m_frameBuffer.GetHeight(),null);
m_bufferStrategy.show();
}
}
修改Main.java
/**
*
* @author yangshuohao
*/
public class Main
{
public static void main(String[] args)
{
Display display=new Display(800,660,"Render");
RenderContext target=display.GetFrameBuffer();
Stars3D stars=new Stars3D(4096,64.0f,20.0f);
long previousTime=System.nanoTime();
while (true)
{
long currentTime=System.nanoTime();
float delta=(float)((currentTime-previousTime)/1000000000.0);
previousTime=currentTime;
//stars.UpdateAndRender(target, delta);
target.Clear((byte)0x00);
for(int j=100;j<200;j++)
{
target.DrawScanBuffer(j, 100, 200);
}
target.FillShape(100, 200);
display.SwapBuffers();
}
}
}
结果
