야밤을 틈타 옛 생각에 물들어.. 한창 애플릿 클라이언트 만들던 2000-2001년 시절 백업해둔 시디를 뒤져보다가, 겨니와 열심히 만들던 가빠채팅 -_- 을 찾게 되었다.
암튼
java.awt.Canvas 클래스 내 EventDispatchThread (EDT) 안에서 getGraphics로 graphics context 를 가져온 뒤 여기다 setXORMode 를 입히고 fillRect 를 하면 엄청난 성능저하를 볼 수 있다. (setXORMode를 빼보니 빠르게 동작한다. 다른 부분은 아직 테스트해보지 않았음)
700x24 짜리 fillRect 하는데 2,000 ms 이상 걸린다고 하면 믿을 수 있겠는가 -_- offscreen buffer 에도 똑같이 setXORMode로 그려본 결과 이 부분에서는 전혀 성능 저하가 없다. 그나저나 2000년에 만든 코드여서 그런지 createGraphics 로 offscreen buffer를 만드는 등의 코드들이 여기저기 널려있는데, JDK 1.4부터 추가된 Canvas.createBufferStrategy 덕분에 createGraphics 는 더이상 쓸모가 없어보인다 -.-;
아무튼 미치고 팔짝 뛰겠다.
내 JRE 버전은 1.6.0_10 b14
위 코드가 멀쩡히 돌아가던 시절의 JRE는 MS JVM 1.1 -_-
참고로 옆 pc 에 깔려있던 jre 1.5 에서는 아무런 문제없이 작동한다.
테스트 코드
import java.awt.*;
public class test extends Canvas
{
public void paint( Graphics g )
{
g.setColor( Color.black );
g.fillRect( 0, 0, 400, 20 );
g.setXORMode( Color.red );
g.setColor( Color.yellow );
g.fillRect( 0, 0, 400, 20 );
g.setPaintMode();
}
public static void main( String[] args ) throws Exception
{
Frame f = new Frame("-_-");
f.setSize( 400, 400 );
f.setLayout(new BorderLayout());
f.add( new test() );
f.setVisible(true);
}
}
테스트 결과 jdk 1.6.0_10 계열에서만 생기는 문제인 듯 하다. 1.6.0_07 이하 버전에는 XORMode 가 정상적으로 동작한다.
GWT 1.5 RC1 도 그렇고.. 버전 올라가면서 느려지는 게 왜케 많아;;
Comments
9 thoughts shared
700x24면 직접 픽셀 루프를 돌면서 처리해도 그 정도는 안 걸리는데(정도가 아니라 순식간) ... 혹시 _10 windows JDK 빌드에 이상한 디버깅 코드가 들어가 있는 건 아닐런지? ㄷㄷㄷ
java 쪽 살짝 개발할 일 있어서, jdk 1.6.0_10 받아서 봤는데, 문서에 Swing이나 Java2D 쪽이 Windows에서 D3D 하드웨어 가속 처리가 기본이라고 하네요. D3D 인터페이스에서 직접적으로 XOR 연산을 지원하지 않아서 그런 경우 더 느려진다고 하는 듯...
근데 최신 그래픽 드라이버에 DirectX 9.0c 이상, Shader 2.0 이상의 VGA 요구 사항이 있는데, 이 정도면 Shader로 발라주면 될텐데... 아마 나중에는 고쳐서 나올 듯?
Continue Reading
Discover more thoughts and insights
수감생활과 무기력 유지하기
백수되고픈 이유가 뭘지 생각해본다. 작년 2월 말 "회사에 취업해야겠다"는 결심을 했을 때의 마음가짐은 감옥에 수감되어 스스로의 자유를 박탈한다는 것이었다. 수감생활이 편안하려면 바깥 생활에 대한 갈망이 발생하지
프로그래머로 돌아왔다
2009년 8월, 프로그래머로 살던 나는 어디로 갔을까라는 포스트를 올린 적이 있다. 그리고 5개월이 지난 지금, 나는 온전히 프로그래머로 살고 있다. 프로그래밍을 해야한다고 생각하지도 않고, 좀 더 나은
기분이 좋으면 글을 못 쓴다
미세먼지 나쁨을 무시하고 한강을 한 시간쯤 걷고 풀업을 즐기다 왔더니 기분이 너무 좋아 글을 쓰지 못하겠다. 기분이 좋을 때 나는 온갖 종류의 쓰기 행위를 할 생각이 없어지는데 이는 집중이 온갖 컨디션을 다