야밤을 틈타 옛 생각에 물들어.. 한창 애플릿 클라이언트 만들던 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
보컬이 포함된 나의 옛친구
녹음은 8월말에 한 것이지만, 부끄러워서 못 올리고 있다가 -\_- 2달이 지나서야 올려본다. 피아노 반주를 따로 녹음하고 반주를 들으며 노래를 불러 믹싱한 것! 들어보기 자 여러분도 할 수 있습니다! 지금
OOP에 대한 단상들
우연히 박영록이 쓴 안드로이드를 하면서 다시 생각해본 OOP를 읽고 OOP에 대한 단상들을 뱉어내기로 했다. 영록이가 쓴 글의 문맥과는 거리가 멀다는 점을 염두해두시라. 나는 OOP를 상당히 좋아한다. 그저 객체
잘할 수 있는 것만 계속 하면
잘할 수 있는 일만 계속 하면 어떻게 될까? 익숙한 일을 하면 자기가 익숙한 부분을 할 때의 자기 자신을 거의 자각할 수 없을 것이다. 익숙하니까. 사람들은 자기가 멀뚱히 시간을 떼우고 있다는 사실을 견디기