Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
45 commits
Select commit Hold shift + click to select a range
446ad25
feat: create dynamic FramePieceRenderer anchoring system
Jameskmonger Jul 17, 2023
6da7a2a
refactor: migrate chatbox rendering to FramePieceRenderer
Jameskmonger Jul 17, 2023
43a88e6
refactor: move unnecessary RenderTabArea
Jameskmonger Jul 17, 2023
23c359f
refactor: split Minimap and MinimapRenderer
Jameskmonger Jul 18, 2023
c5d918f
refactor: extend FrameRenderer interface and move logic to ResizableF…
Jameskmonger Jul 18, 2023
8de35ea
refactor: remove drawFramePiece
Jameskmonger Jul 18, 2023
d13a4c1
refactor: create FixedFrameRenderer and defer all coords checks
Jameskmonger Jul 18, 2023
9247136
refactor: dont create renderer by default
Jameskmonger Jul 18, 2023
c251a09
refactor: remove unused minimap instance
Jameskmonger Jul 18, 2023
b1b1c60
refactor: simplify frame checks in drawGameScreen
Jameskmonger Jul 18, 2023
8a0e02a
refactor: rename drawFrame
Jameskmonger Jul 18, 2023
350a64c
refactor: move needless if check
Jameskmonger Jul 18, 2023
4a18ad0
refactor: move gameScreenImageProducer to ScreenController and add ra…
Jameskmonger Jul 18, 2023
bd3cbe5
refactor: convert DebugTools to instanced rasterizer
Jameskmonger Jul 18, 2023
b47b6e6
refactor: pass RasterizerInstanced to FrameRenderer
Jameskmonger Jul 18, 2023
ac8245a
refactor: convert resizable debug view to instanced rasterizer
Jameskmonger Jul 18, 2023
b590300
refactor: use rasterizer directly, move methods out of FramePieceRend…
Jameskmonger Jul 18, 2023
996346c
fix: add check for MAX_VALUE in RasterizerInstanced.copyPixels
Jameskmonger Jul 18, 2023
9bb6811
refactor: draw to specified RasterizerInstanced
Jameskmonger Jul 18, 2023
15d7bf8
refactor: rename createGameRasterizer to setDrawComponent
Jameskmonger Jul 18, 2023
6c19949
refactor: move genuine statics to top
Jameskmonger Jul 18, 2023
c55029f
refactor: create rasterizer on ScreenController immediately
Jameskmonger Jul 18, 2023
8474afc
refactor: use instanced Rasteriser in Game
Jameskmonger Jul 18, 2023
d698a7b
refactor: rename LoginScreen
Jameskmonger Jul 18, 2023
9a82a3a
refactor: de-staticify loginscreen
Jameskmonger Jul 18, 2023
8233c9d
refactor: rename cleanup
Jameskmonger Jul 18, 2023
9960ae9
refactor: add optional RasterizerInstanced to ProducingGraphicsBuffers
Jameskmonger Jul 18, 2023
75ddfee
refactor: convert LoginScreen to use instance rasterizer (except text…
Jameskmonger Jul 18, 2023
b570848
refactor: convert text to use instanced rasterizer
Jameskmonger Jul 18, 2023
0ee8158
refactor: rename Model draw methods
Jameskmonger Jul 18, 2023
4eedccb
fix: reset bounds after draw
Jameskmonger Jul 18, 2023
46eb24b
refactor: move lookup tables to Constants3D
Jameskmonger Jul 18, 2023
889aaac
refactor: create Palette class to store color palette
Jameskmonger Jul 18, 2023
a87da62
refactor: don't make Rasterizer3D extend Rasterizer
Jameskmonger Jul 18, 2023
ac4041e
refactor: rename to decapitalise Rasterizer (for easier searching)
Jameskmonger Jul 18, 2023
c23afb3
refactor: create Game3DRenderer for screen overlays
Jameskmonger Jul 18, 2023
ceb6f20
Revert "refactor: use instanced Rasteriser in Game"
Jameskmonger Jul 19, 2023
c119b91
refactor: convert ChatBox to instanced rasterizer
Jameskmonger Jul 21, 2023
e3c3952
refactor: remove needless Rasterizer. specifiers
Jameskmonger Jul 21, 2023
62e3b37
refactor: use instanced Rasterizer in ScreenController
Jameskmonger Jul 21, 2023
e6821b6
refactor: use instanced rasterizer for minimap
Jameskmonger Jul 21, 2023
483975b
refactor: dont extend Rasterizer in ImageRGB
Jameskmonger Jul 21, 2023
53d7b48
refactor: use instanced rasterizer for console scrollbar
Jameskmonger Jul 21, 2023
1c0ac11
refactor: convert "loading text" to instanced rasterizer
Jameskmonger Jul 21, 2023
a0322d9
refactor: convert healthbar to instanced rasterizer
Jameskmonger Jul 21, 2023
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
190 changes: 84 additions & 106 deletions src/main/java/org/runejs/client/Game.java

Large diffs are not rendered by default.

6 changes: 3 additions & 3 deletions src/main/java/org/runejs/client/Landscape.java
Original file line number Diff line number Diff line change
Expand Up @@ -513,7 +513,7 @@ private void createRegion(CollisionMap[] collisionMaps) {
}
int underlayMinimapColour = 0;
if(hslBitsetRandomised != -1)
underlayMinimapColour = Rasterizer3D.hsl2rgb[mixLightness(hslBitsetRandomised, 96)];
underlayMinimapColour = Rasterizer3D.palette.hsl2rgb[mixLightness(hslBitsetRandomised, 96)];
if(overlayId != 0) {
int shape = 1 + tile_underlay_path[_plane][x][y];
byte rotation = tile_overlay_rotation[_plane][x][y];
Expand All @@ -540,7 +540,7 @@ else if(s > 255)
}
int rgb = 0;
if(overlayMinimapColour != -2)
rgb = Rasterizer3D.hsl2rgb[MovedStatics.mixLightnessSigned(overlayMinimapColour, 96)];
rgb = Rasterizer3D.palette.hsl2rgb[MovedStatics.mixLightnessSigned(overlayMinimapColour, 96)];
if(overlayDefinition.secondaryColor != -1) {
int i_54_ = 0xff & randomiserHue + overlayDefinition.otherHue;
int i_55_ = overlayDefinition.otherSaturation + randomiserLightness;
Expand All @@ -550,7 +550,7 @@ else if(s > 255)
} else
i_55_ = 0;
overlayMinimapColour = generateHslBitset(overlayDefinition.otherLightness, i_55_, i_54_);
rgb = Rasterizer3D.hsl2rgb[MovedStatics.mixLightnessSigned(overlayMinimapColour, 96)];
rgb = Rasterizer3D.palette.hsl2rgb[MovedStatics.mixLightnessSigned(overlayMinimapColour, 96)];
}
this.scene.addTile(_plane, x, y, shape, rotation, textureId, vertexHeightSW, vertexHeightSE, vertexHeightNE, vertexHeightNW, mixLightness(hslBitsetOriginal, lightIntensitySW), mixLightness(hslBitsetOriginal, lightIntensitySE), mixLightness(hslBitsetOriginal, lightIntensityNE), mixLightness(hslBitsetOriginal, lightIntensityNW), MovedStatics.mixLightnessSigned(hslBitset, lightIntensitySW), MovedStatics.mixLightnessSigned(hslBitset, lightIntensitySE), MovedStatics.mixLightnessSigned(hslBitset, lightIntensityNE), MovedStatics.mixLightnessSigned(hslBitset, lightIntensityNW), underlayMinimapColour, rgb);
} else
Expand Down

Large diffs are not rendered by default.

305 changes: 30 additions & 275 deletions src/main/java/org/runejs/client/MovedStatics.java

Large diffs are not rendered by default.

12 changes: 11 additions & 1 deletion src/main/java/org/runejs/client/ProducingGraphicsBuffer.java
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package org.runejs.client;

import org.runejs.client.media.Rasterizer;
import org.runejs.client.media.RasterizerInstanced;

import java.awt.*;

Expand All @@ -11,11 +12,20 @@ public abstract class ProducingGraphicsBuffer {
public Image image;

public abstract void method1041(int i, int i_2_, Component component, int i_3_);
public abstract void method1041(int i, int i_2_, Component component, int i_3_, RasterizerInstanced rasterizerInstance);

public abstract void drawGraphics(int x, int y, Graphics graphics);
public abstract void paintComponent(int x, int y, Graphics graphics);

public void prepareRasterizer(RasterizerInstanced rasterizerInstance) {
if (rasterizerInstance == null) {
Rasterizer.prepare(pixels, width, height);
} else {
rasterizerInstance.prepare(pixels, width, height);
}
}

public void prepareRasterizer() {
Rasterizer.prepare(pixels, width, height);
prepareRasterizer(null);
}
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package org.runejs.client;

import org.runejs.client.media.Rasterizer;
import org.runejs.client.media.RasterizerInstanced;

import java.awt.*;
import java.awt.image.*;
Expand Down Expand Up @@ -50,7 +51,7 @@ public synchronized void addConsumer(ImageConsumer arg0) {
arg0.setHints(14);
}

public void method1041(int arg0, int arg1, Component arg2, int arg3) {
public void method1041(int arg0, int arg1, Component arg2, int arg3, RasterizerInstanced rasterizerInstanced) {
pixels = new int[1 + arg1 * arg3];
width = arg1;
height = arg3;
Expand All @@ -64,7 +65,11 @@ public void method1041(int arg0, int arg1, Component arg2, int arg3) {
arg2.prepareImage(image, this);
drawPixels();
arg2.prepareImage(image, this);
this.prepareRasterizer();
this.prepareRasterizer(rasterizerInstanced);
}

public void method1041(int arg0, int arg1, Component arg2, int arg3) {
method1041(arg0, arg1, arg2, arg3, null);
}

public void startProduction(ImageConsumer arg0) {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
package org.runejs.client;

import org.runejs.client.media.RasterizerInstanced;

import java.awt.*;
import java.awt.image.*;
import java.util.Hashtable;
Expand All @@ -14,7 +16,7 @@ public void paintComponent(int arg1, int arg3, Graphics arg2) {
arg2.drawImage(image, arg1, arg3, aComponent2214);
}

public void method1041(int arg0, int arg1, Component arg2, int arg3) {
public void method1041(int arg0, int arg1, Component arg2, int arg3, RasterizerInstanced rasterizerInstance) {
width = arg1;
if(arg0 > 4) {
pixels = new int[1 + arg3 * arg1];
Expand All @@ -24,7 +26,11 @@ public void method1041(int arg0, int arg1, Component arg2, int arg3) {
WritableRaster writableraster = Raster.createWritableRaster(directcolormodel.createCompatibleSampleModel(width, height), databufferint, null);
image = new BufferedImage(directcolormodel, writableraster, false, new Hashtable());
aComponent2214 = arg2;
prepareRasterizer();
prepareRasterizer(rasterizerInstance);
}
}

public void method1041(int arg0, int arg1, Component arg2, int arg3) {
method1041(arg0, arg1, arg2, arg3, null);
}
}
3 changes: 2 additions & 1 deletion src/main/java/org/runejs/client/Texture.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

import org.runejs.client.cache.CacheArchive;
import org.runejs.client.cache.media.IndexedImage;
import org.runejs.client.media.ColorUtils;
import org.runejs.client.node.Node;
import org.runejs.client.io.Buffer;
import org.runejs.client.media.Rasterizer3D;
Expand Down Expand Up @@ -136,7 +137,7 @@ public boolean method869(double arg0, int textureSize, CacheArchive imageArchive
}
}
for(int i_19_ = 0; i_19_ < imgPalette.length; i_19_++)
imgPalette[i_19_] = Rasterizer3D.adjustBrightness(imgPalette[i_19_], arg0);
imgPalette[i_19_] = ColorUtils.adjustBrightness(imgPalette[i_19_], arg0);
int i_20_;
if(i_12_ == 0)
i_20_ = 0;
Expand Down
5 changes: 3 additions & 2 deletions src/main/java/org/runejs/client/cache/def/ItemDefinition.java
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
import org.runejs.client.cache.media.ImageRGB;
import org.runejs.client.io.Buffer;
import org.runejs.client.language.English;
import org.runejs.client.media.Constants3D;
import org.runejs.client.media.Rasterizer;
import org.runejs.client.media.Rasterizer3D;
import org.runejs.client.media.renderable.Model;
Expand Down Expand Up @@ -168,8 +169,8 @@ public static ImageRGB sprite(int stackSize, int id, int backColour) {
if(backColour > 0)
i_11_ *= 1.04;
Rasterizer3D.notTextured = false;
int i_12_ = Rasterizer3D.sinetable[definition.xan2d] * i_11_ >> 16;
int i_13_ = i_11_ * Rasterizer3D.cosinetable[definition.xan2d] >> 16;
int i_12_ = Constants3D.sinetable[definition.xan2d] * i_11_ >> 16;
int i_13_ = i_11_ * Constants3D.cosinetable[definition.xan2d] >> 16;
model.method799();
model.drawModel(0, definition.yan2d, definition.zan2d, definition.xan2d, definition.xOffset2d, definition.yOffset2d + model.modelHeight / 2 + i_12_, i_13_ + definition.yOffset2d);
for(int i_14_ = 31; i_14_ >= 0; i_14_--) {
Expand Down
128 changes: 102 additions & 26 deletions src/main/java/org/runejs/client/cache/media/ImageRGB.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,14 @@
import org.runejs.client.MovedStatics;
import org.runejs.client.cache.CacheArchive;
import org.runejs.client.media.Rasterizer;
import org.runejs.client.media.RasterizerInstanced;
import org.runejs.client.node.CachedNode;
import org.runejs.client.util.BitUtils;

import java.awt.*;
import java.awt.image.PixelGrabber;

public class ImageRGB extends Rasterizer {
public class ImageRGB extends CachedNode {
public int offsetY;
public int imageHeight;
public int imageWidth;
Expand Down Expand Up @@ -355,6 +357,43 @@ public void drawImageWithTexture(int x, int y, int textureId, int arg3) {
method722(maxWidth << 3, maxHeight << 3, x << 4, y << 4, textureId, arg3);
}

public void drawImage(RasterizerInstanced rasterizer, int x, int y) {
x += offsetX;
y += offsetY;
int dest_offset = x + y * rasterizer.destinationWidth;
int source_offset = 0;
int line_count = imageHeight;
int line_width = imageWidth;
int line_offset_dest = rasterizer.destinationWidth - line_width;
int line_offset_source = 0;
if(y < rasterizer.viewportTop) {
int clip_height = rasterizer.viewportTop - y;
line_count -= clip_height;
y = rasterizer.viewportTop;
source_offset += clip_height * line_width;
dest_offset += clip_height * rasterizer.destinationWidth;
}
if(y + line_count > rasterizer.viewportBottom)
line_count -= y + line_count - rasterizer.viewportBottom;
if(x < rasterizer.viewportLeft) {
int clip_width = rasterizer.viewportLeft - x;
line_width -= clip_width;
x = rasterizer.viewportLeft;
source_offset += clip_width;
dest_offset += clip_width;
line_offset_source += clip_width;
line_offset_dest += clip_width;
}
if(x + line_width > rasterizer.viewportRight) {
int clip_width = x + line_width - rasterizer.viewportRight;
line_width -= clip_width;
line_offset_source += clip_width;
line_offset_dest += clip_width;
}
if(line_width > 0 && line_count > 0)
blockCopyTrans(rasterizer.destinationPixels, pixels, 0, source_offset, dest_offset, line_width, line_count, line_offset_dest, line_offset_source);
}

public void drawImage(int x, int y) {
x += offsetX;
y += offsetY;
Expand Down Expand Up @@ -782,11 +821,11 @@ public void method722(int arg0, int arg1, int arg2, int arg3, int arg4, int arg5
}
}

public void prepareRasterizer() {
Rasterizer.prepare(pixels, imageWidth, imageHeight);
public void prepareRasterizer(RasterizerInstanced rasterizer) {
rasterizer.prepare(pixels, imageWidth, imageHeight);
}

public void shapeImageToPixels(int x, int y, int width, int height, int arg4, int arg5, int k1, int zoom, int[] arg8, int[] arg9) {
public void shapeImageToPixels(RasterizerInstanced rasterizer, int x, int y, int width, int height, int arg4, int arg5, int k1, int zoom, int[] arg8, int[] arg9) {
try {
int centerX = -width / 2;
int centerY = -height / 2;
Expand All @@ -796,7 +835,7 @@ public void shapeImageToPixels(int x, int y, int width, int height, int arg4, in
cosine = cosine * zoom >> 8;
int i_125_ = (arg4 << 16) + centerY * sine + centerX * cosine;
int i_126_ = (arg5 << 16) + centerY * cosine - centerX * sine;
int destinationOffset = x + y * Rasterizer.destinationWidth;
int destinationOffset = x + y * rasterizer.destinationWidth;

for(y = 0; y < height; y++) {
int i_128_ = arg8[y];
Expand All @@ -809,55 +848,55 @@ public void shapeImageToPixels(int x, int y, int width, int height, int arg4, in
if(!(pixels.length < pixelToGet || pixelToGet < 0)){
colour = pixels[pixelToGet];
}
Rasterizer.destinationPixels[i_129_++] = colour;
rasterizer.destinationPixels[i_129_++] = colour;
i_130_ += cosine;
i_131_ -= sine;
}
i_125_ += sine;
i_126_ += cosine;
destinationOffset += Rasterizer.destinationWidth;
destinationOffset += rasterizer.destinationWidth;
}
} catch(Exception exception) {
/* empty */
exception.printStackTrace();
}
}

public void drawTo(IndexedImage indexedImage, int x, int y) {
public void drawTo(RasterizerInstanced rasterizer, IndexedImage indexedImage, int x, int y) {
x += offsetX;
y += offsetY;
int dest_ptr = x + y * Rasterizer.destinationWidth;
int dest_ptr = x + y * rasterizer.destinationWidth;
int source_ptr = 0;
int line_count = imageHeight;
int line_width = imageWidth;
int line_offset_dest = Rasterizer.destinationWidth - line_width;
int line_offset_dest = rasterizer.destinationWidth - line_width;
int line_offset_src = 0;
if(y < Rasterizer.viewportTop) {
int clip_height = Rasterizer.viewportTop - y;
if(y < rasterizer.viewportTop) {
int clip_height = rasterizer.viewportTop - y;
line_count -= clip_height;
y = Rasterizer.viewportTop;
y = rasterizer.viewportTop;
source_ptr += clip_height * line_width;
dest_ptr += clip_height * Rasterizer.destinationWidth;
dest_ptr += clip_height * rasterizer.destinationWidth;
}
if(y + line_count > Rasterizer.viewportBottom)
line_count -= y + line_count - Rasterizer.viewportBottom;
if(x < Rasterizer.viewportLeft) {
int clip_width = Rasterizer.viewportLeft - x;
if(y + line_count > rasterizer.viewportBottom)
line_count -= y + line_count - rasterizer.viewportBottom;
if(x < rasterizer.viewportLeft) {
int clip_width = rasterizer.viewportLeft - x;
line_width -= clip_width;
x = Rasterizer.viewportLeft;
x = rasterizer.viewportLeft;
source_ptr += clip_width;
dest_ptr += clip_width;
line_offset_src += clip_width;
line_offset_dest += clip_width;
}
if(x + line_width > Rasterizer.viewportRight) {
int clip_width = x + line_width - Rasterizer.viewportRight;
if(x + line_width > rasterizer.viewportRight) {
int clip_width = x + line_width - rasterizer.viewportRight;
line_width -= clip_width;
line_offset_src += clip_width;
line_offset_dest += clip_width;
}
if(line_width > 0 && line_count > 0)
blockCopyMask(Rasterizer.destinationPixels, pixels, 0, source_ptr, dest_ptr, line_width, line_count, line_offset_dest, line_offset_src, indexedImage.imgPixels);
blockCopyMask(rasterizer.destinationPixels, pixels, 0, source_ptr, dest_ptr, line_width, line_count, line_offset_dest, line_offset_src, indexedImage.imgPixels);
}

public void trim() {
Expand All @@ -875,6 +914,43 @@ public void trim() {
}
}

public void drawInverse(RasterizerInstanced rasterizer, int x, int y) {
x += offsetX;
y += offsetY;
int rasterizerPixel = x + y * rasterizer.destinationWidth;
int pixel = 0;
int newHeight = imageHeight;
int newWidth = imageWidth;
int rasterizerPixelOffset = rasterizer.destinationWidth - newWidth;
int pixelOffset = 0;
if(y < rasterizer.viewportTop) {
int yOffset = rasterizer.viewportTop - y;
newHeight -= yOffset;
y = rasterizer.viewportTop;
pixel += yOffset * newWidth;
rasterizerPixel += yOffset * rasterizer.destinationWidth;
}
if(y + newHeight > rasterizer.viewportBottom)
newHeight -= y + newHeight - rasterizer.viewportBottom;
if(x < rasterizer.viewportLeft) {
int xOffset = rasterizer.viewportLeft - x;
newWidth -= xOffset;
x = rasterizer.viewportLeft;
pixel += xOffset;
rasterizerPixel += xOffset;
pixelOffset += xOffset;
rasterizerPixelOffset += xOffset;
}
if(x + newWidth > rasterizer.viewportRight) {
int widthOffset = x + newWidth - rasterizer.viewportRight;
newWidth -= widthOffset;
pixelOffset += widthOffset;
rasterizerPixelOffset += widthOffset;
}
if(newWidth > 0 && newHeight > 0)
copyPixels(rasterizer.destinationPixels, pixels, pixel, rasterizerPixel, newWidth, newHeight, rasterizerPixelOffset, pixelOffset);
}

public void drawInverse(int x, int y) {
x += offsetX;
y += offsetY;
Expand Down Expand Up @@ -949,7 +1025,7 @@ public void drawImageWithOpacity(int x, int y, int opacity) {
method730(Rasterizer.destinationPixels, pixels, 0, i_149_, i, i_151_, i_150_, i_152_, i_153_, opacity);
}

public void drawRotated(int x, int y, int pivotX, int pivotY, int width, int height, int zoom, double angle) {
public void drawRotated(RasterizerInstanced rasterizer, int x, int y, int pivotX, int pivotY, int width, int height, int zoom, double angle) {
try {
int centerX = -width / 2;
int centerY = -height / 2;
Expand All @@ -959,23 +1035,23 @@ public void drawRotated(int x, int y, int pivotX, int pivotY, int width, int hei
cosine = cosine * zoom >> 8;
int sourceOffsetX = (pivotX << 16) + centerY * sine + centerX * cosine;
int sourceoffsetY = (pivotY << 16) + centerY * cosine - centerX * sine;
int destinationOffset = x + y * Rasterizer.destinationWidth;
int destinationOffset = x + y * rasterizer.destinationWidth;
for(y = 0; y < height; y++) {
int i = destinationOffset;
int offsetX = sourceOffsetX;
int offsetY = sourceoffsetY;
for(x = -width; x < 0; x++) {
int i_166_ = pixels[(offsetX >> 16) + (offsetY >> 16) * imageWidth];
if(i_166_ != 0)
Rasterizer.destinationPixels[i++] = i_166_;
rasterizer.destinationPixels[i++] = i_166_;
else
i++;
offsetX += cosine;
offsetY -= sine;
}
sourceOffsetX += sine;
sourceoffsetY += cosine;
destinationOffset += Rasterizer.destinationWidth;
destinationOffset += rasterizer.destinationWidth;
}
} catch(Exception exception) {
/* empty */
Expand Down
Loading